2013-04-04 155 views
1

好吧,這是越來越令人沮喪,接下來的一個問題。我推送我的應用程序到heroku,當我訪問url時,我得到我的登錄屏幕(我應該)。但是當我真正嘗試登錄時,它會給我提供「無效的用戶名/密碼」警告消息。然而,一切工作正常我的本地主機。我假設應用程序與我的數據庫進行通信時出現問題。我跑了「heroku跑耙db:遷移」,沒有運氣。登錄無法與heroku應用程序

在我的本地主機上,我使用的是標準sqlite3數據庫,但是當我將它推送到heroku以避免錯誤時,我不得不在gem文件中包含gem'pg'。當我離開它作爲寶石sqlite3我收到一個錯誤,說它無法找到sqlite3.h文件或這種性質的東西。

我可以看到我的數據庫生活在postgres.heroku.com。我已經通過的Heroku的支持

寶石的建議還安裝了這種寶石的ActiveRecord-PostgreSQL的適配器「

下面是一些的Heroku日誌時我嘗試輸入登錄信息。任何幫助是極大的讚賞。

←[36m2013-04-04T14:31:15+00:00 app[web.1]:←[0m Started POST "/session" for 74.143.68.203 at 2013-04-04 14:31:15 +0000 
←[36m2013-04-04T14:31:15+00:00 app[web.1]:←[0m Processing by SessionsController#create as HTML 
←[36m2013-04-04T14:31:15+00:00 app[web.1]:←[0m Parameters: {"utf8"=>"???", "authenticity_token"=>"rQ1i9DRCV3qju2+RSBwp/9XYW8+6RiLfKfGZFNEcbT8=", "email"=>"[email protected]", "password"=>"[FILTERED]", "commit"=>"Login"} 
←[36m2013-04-04T14:31:15+00:00 app[web.1]:←[0m Rendered sessions/new.html.erb within layouts/application (0.9ms) 
←[36m2013-04-04T14:31:15+00:00 app[web.1]:←[0m Completed 200 OK in 4ms (Views: 2.2ms | ActiveRecord: 1.2ms) 
←[33m2013-04-04T14:31:16+00:00 heroku[router]:←[0m at=info method=GET path=/favicon.ico host=boiling-reef-2060.herokuapp.com fwd="74.143.68.203" dyno=web.1 connect=2ms service=7ms status=304 bytes=0 
←[33m2013-04-04T14:31:15+00:00 heroku[router]:←[0m at=info method=POST path=/session host=boiling-reef-2060.herokuapp.com fwd="74.143.68.203" dyno=web.1 connect=1ms service=12ms status=200 bytes=1721 

我只是不明白爲什麼當我的應用程序是在本地主機上使用相同的用戶名我可以登錄/密碼,但是當應用程序是在Heroku它無法識別的登錄信息。

附加編輯_ __ _ __ _ __ _ ____

我打開控制檯我的本地應用程序,並找到了我的預期尋找一個用戶時:

$ rails c 
Loading development environment (Rails 3.2.13) 
irb(main):001:0> user=User.find(1) 
    ←[1m←[36mUser Load (5.0ms)←[0m ←[1mSELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1←[0m [["id", 1]] 
=> #<User id: 1, email: "[email protected]", hashed_password: "dc009272b087019fb2b20b691dc827dca1424a1a", created_at: "2010-10-29 19:43:00", updated_at: "2011-01-12 20:07:09", admin: "yes", logo: nil> 

當我在heroku上打開控制檯時發現這是我收到的錯誤。我會繼續尋找修復,但也許你們會看到一個明顯的紅旗。

Connecting to database specified by DATABASE_URL 
Loading production environment (Rails 3.2.13) 
irb(main):001:0> user=User.find(1) 
user=User.find(1) 
User Load (39.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]] 
ActiveRecord::RecordNotFound: Couldn't find User with id=1 
    from /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/relation/finder_methods.rb:343:in `find_one' 
    from /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/relation/finder_methods.rb:314:in `find_with_ids' 
    from /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/relation/finder_methods.rb:107:in `find' 
    from /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/querying.rb:5:in `find' from (irb):1 
    from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start' 
    from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start' 
    from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 
+1

通常你的'開發'和'生產'環境會引用不同的數據庫,所以同樣的登錄不一定適用於這兩者。這裏發生了什麼? – Hbcdev 2013-04-04 15:18:47

+0

我的本地db文件夾中沒有生產數據庫。我之前通過推拉我的計算機上的開發數據庫來維護一箇舊的heroku應用程序。當我在本地添加記錄並推送它們時,更改將對heroku託管的應用程序產生影響。我從來沒有指定使用不同的用戶名/密碼。 – RubyDude1012 2013-04-04 15:26:27

+2

檢查什麼是運行在遠程控制檯 'Heroku的你的Heroku數據庫運行軌道console'和您的用戶模型 – Trompa 2013-04-04 15:34:09

回答

3

當您在本地計算機(又名開發)上運行應用程序時,它使用的是本地sqlite數據庫。當你在heroku(a.k.a. production)上運行它時,它使用基於雲的postgres數據庫。這是必要的,以便您可以在本地計算機上進行更改和開發應用程序,而不必擔心打破實時生產數據庫。數據庫設置位於config/database.yml

如果您已將用戶名/密碼添加到db/seeds或通過遷移,您可以合理地期望在開發和生產中使用相同的登錄名。據推測,這是你以前做過的,當你說這個工作。要麼是這樣,要麼你的生產和開發都指向同一個數據庫(不推薦)。

因爲它不在這裏工作,我猜你通過控制檯或通過網站本身添加登錄。您可以運行heroku run rails console以在生產服務器上打開控制檯,並添加登錄名。或者您可以通過遷移來添加它們,然後在生產環境中運行相同的遷移,以便它們也可以添加到遷移中。

+0

我增加了一些額外的編輯我最初的帖子,如果你可以看看那簡直太好了。感謝 – RubyDude1012 2013-04-04 17:14:39

+0

並感謝詳細的解釋 – RubyDude1012 2013-04-04 17:18:34

+1

的Heroku是告訴你有沒有'User'與'1. id'如果你'User.all'你會看到有所有用戶的列表。我懷疑這個清單是空的。嘗試運行'User.create(:email =>「[email protected]」,:hashed_pa​​ssword =>「dc009272b087019fb2b20b691dc827dca1424a1a」,:admin =>「yes」)''。這應該在生產中創建相同的用戶(使用'User.all'進行檢查),並且您應該能夠登錄。 – Hbcdev 2013-04-04 17:58:11