Ruby on rails heroku部署、日期时间和strftime存在问题

Ruby on rails heroku部署、日期时间和strftime存在问题,ruby-on-rails,datetime,heroku,strftime,Ruby On Rails,Datetime,Heroku,Strftime,我无法将rails应用程序部署到Heroku。 我照常做,但这次我在控制台上发现了这些错误 我想知道它们是如何出现的,因为我甚至没有gsub在这里使用 在我正常的生产环境中,它工作得很好,那么在这种情况下,我忘记考虑什么了 谢谢你的帮助 错误提示:(顺便说一下,数据库内容不是nil或类似的东西) 2012-11-29 17:14:18+0000为XXX开始获取“/锦标赛” TournamentsController#索引为HTML进行处理 布局/应用程序中的渲染锦标赛/index.html.er

我无法将rails应用程序部署到Heroku。 我照常做,但这次我在控制台上发现了这些错误

我想知道它们是如何出现的,因为我甚至没有
gsub在这里使用

在我正常的生产环境中,它工作得很好,那么在这种情况下,我忘记考虑什么了

谢谢你的帮助

错误提示:(顺便说一下,数据库内容不是nil或类似的东西)

2012-11-29 17:14:18+0000为XXX开始获取“/锦标赛”
TournamentsController#索引为HTML进行处理
布局/应用程序中的渲染锦标赛/index.html.erb(74.9ms)
在193ms内完成500个内部服务器错误
31:     
33:     
ActionView::Template::Error(2012-12-08 15:00:00 UTC:Time的未定义方法'gsub!'):
30:von
35:     
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\u views\u tournaments\u index\u html\u erb\u 1016767371206226983\u 23066580'
29:     
app/controllers/tournaments\u controller.rb:11:in'index'
32:     
34:     

它看起来像是
锦标赛返回的对象。date
的类型是
Time
,其中as
DateTime.parse需要一个字符串。
parse
方法的底层实现执行一个
gsub。因此出现了错误

您有两种解决方案:

  • 如果您总是从
    锦标赛.date
    中获得
    时间
    对象,那么您可以使用
    锦标赛.date.to_datetime
    (尽管我认为您实际上不需要
    日期时间
    对象。您可以将
    时间
    对象用于
    strftime

  • 如果不能保证使用
    Time
    对象,则将字符串化对象传递给
    parse
    ,如下所示
    DateTime.parse(锦标赛.date.to)


  • 我不知道这个代码在你本地的机器上是如何工作的。可能是因为两种设置中的ruby版本不同。我的答案是基于MRI 1.9.2。

    作为一般性评论,您需要将大量的逻辑从视图中移开,放入可以正确进行单元测试的方法中。这些类型的错误将不那么频繁,也更容易调试。好吧,我真的应该这样做,但这只会解决问题。它在我的本地机器上正常工作。
    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>