2012-11-29 68 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。