2012-11-29 67 views
0

我很難將Heroku應用程序部署到Heroku。 我一樣正常,但這次我在控制檯上得到了這些錯誤。Heroku部署,DateTime和strftime的問題

我不知道它們是如何出現的,因爲我甚至沒有在這裏使用gsub!

在我的正常生產環境中,它工作得很好,所以在這種情況下我忘了考慮什麼?

感謝您的幫助!

的錯誤提示:(順便說一下,數據庫內容不爲零或類似的東西)

Started GET "/tournaments" for XXX at 2012-11-29 17:14:18 +0000 
Processing by TournamentsController#index as HTML 
    Rendered tournaments/index.html.erb within layouts/application (74.9ms) 
Completed 500 Internal Server Error in 193ms 

    31:  <td><%= raw tournament.address.split(", ").join("<br />") %></td> 
    33:  <td><%= DateTime.parse(tournament.date).strftime("%H:%M") %></td> 
ActionView::Template::Error (undefined method `gsub!' for 2012-12-08 15:00:00 UTC:Time): 
    30:  <td><%= tournament.place %> von <%= tournament.participants %></td> 
    35:  <td><%= link_to 'Show', tournament %></td> 
    app/views/tournaments/index.html.erb:32:in `block in _app_views_tournaments_index_html_erb___1016767371206226983_23066580' 
    app/views/tournaments/index.html.erb:26:in `each' 
    app/views/tournaments/index.html.erb:26:in `_app_views_tournaments_index_html_erb___1016767371206226983_23066580' 
    29:  <td><%= tournament.user.name %></td> 

    app/controllers/tournaments_controller.rb:11:in `index' 
    32:  <td><%= DateTime.parse(tournament.date).strftime("%d.%m.%Y") %></td> 
    34:  <td><%= tournament.kind %></td> 
+0

作爲一般性評論,您需要將很多此邏輯從視圖中移出,並轉換爲可以正確進行單元測試的方法。這些類型的錯誤將不太頻繁,並且更易於調試。 – jdl

+0

好的,我真的應該這樣做,但那隻會解決問題。它的工作原理與我的本地機器一樣。 –

回答

0

它看起來像由tournament.date返回的對象是Time類型,其中爲DateTime.parse期望一個的串。 parse方法的底層實現對傳遞的參數執行gsub!。因此錯誤。

有兩種解決方法:

  1. 如果你總是從一個tournament.date對象Time那麼你可以使用tournament.date.to_datetime(雖然我不認爲你真的需要一個DateTime對象可以使用Time對象。對於strftime

  2. 如果你不能保證一個Time對象,然後將字符串對象傳遞給parse這樣DateTime.parse(tournament.date.to_s)

P.S:我不知道你的代碼在你的本地機器上是如何工作的。可能是因爲兩個設置中的ruby版本不同。我的回答基於MRI 1.9.2。