2011-04-21 73 views
0

應用程序在開發模式下運行平穩,但將其部署到託管服務器上會顯示public/500.html頁面(「很抱歉,但出錯了」) ,看起來什麼時候內容查詢mysql數據庫。放置靜態內容的作品,令人困惑的動態內容只能在本地開發。生產模式中的Rails問題,mysql數據庫

rake db:migrate正常運行,我手動插入了一個測試條目到mysql數據庫。

然而,在請求500的查看結果和日誌給

ActionView::Template::Error (NULL pointer given): 
    10: ... 
    11: <% @projects.each do |project| %> 
    12: ...   

服務器運行MySQL的54年1月5日,Rails已經安裝mysql的寶石。 任何提示讚賞!

編輯:

所以我只是在遠程服務器上啓動

rails c production

,並在我的 「客戶端」 模式創建的條目:

irb(main):003:0> c = Client.new => #<Client id: nil, name: nil, permalink: nil, created_at: nil, updated_at: nil> irb(main):004:0> c.name = "realclient" => "realclient" irb(main):005:0> c => #<Client id: nil, name: "realclient", permalink: nil, created_at: nil, updated_at: nil> irb(main):006:0> c.save => true

雖然除之外的所有字段n AME在IRB都顯示爲空,實際的數據庫服務器上顯示所有repective領域好嗎:

2 realclient realclient 2011-04-22 13:59:12 2011-04-22 13:59:12 (ID,姓名,永久鏈接,創建,更新)

所以底線:活動記錄不能接收值正確地從數據庫中實際存在?

回答

0

** 解決 **

我的託管服務提供商只允許使用其預裝的MySQL 2.7的寶石。在Gemfile中任何手動加載mysql gem都會導致Active Record錯誤 - 甚至在自己的2.7版本上加載。堅持託管服務器上的默認gem工作。

在服務器上單獨設置新數據庫可能可以使用自定義數據庫寶石。所以,雖然這是一個非常具體的問題,但也許答案可以幫助其他人在託管服務器上使用rails。

0

當您運行rake db:migrate時,您可能沒有設置RAILS_ENV,因此仍在運行開發環境。試試運行:

RAILS_ENV=production rake db:migrate 

見,如果你得到一個錯誤,那麼,如果是這樣,你可以用--trace選項更詳細重新運行它。

你可能需要調試在這個問題上你的config/database.yml - 就會有一些人失蹤或生產部分配置錯誤(或者也許你還沒有創建數據庫什麼的,我不熟悉具體錯誤信息)。

+0

'RAILS_ENV =生產耙分貝:migrate'去正常,已成功創建的所有表。因此我們可以將database.yml視爲正確的? '--trace'顯示沒有錯誤。 剛剛刪除了數據庫,並進行了全新遷移。所以,當沒有條目存在時,視圖呈現正常。只要數據庫得到填充,並且確實有某些內容可以查詢錯誤500中的視圖結果。您是否還有其他想法?非常感謝! – David 2011-04-22 06:51:54

+0

此外,我建立了與MySQL 4.x版,而不是之前的5.0版本另一個數據庫,但填充時錯誤仍然存​​在。 我也雙重檢查而被發現OK了一些捆綁的寶石。 任何人知道如何從Apache或乘客日誌讀取受管服務器上的更多信息? (不知道如何拿到手上的那些) 似乎-f'不來這裏幫助從'尾巴的消息。 – David 2011-04-22 08:10:19

+0

我不知道還有什麼其他的差別有可能是您的Web服務器實例和命令行之間。服務器如何運行你的Rails應用程序?也許Web服務器使用不同的Ruby(因此是一個不同的MySQL寶石)? – smathy 2011-04-22 15:04:55