Rails.application.routes.url_helpers崩溃Heroku应用程序

我正在为Collection + Json构建一个Serializer ,我正在编写一个API作为示例。 在Heroku上部署的应用程序上使用Rails.application.routes.url_helpers时遇到问题。

我在一个序列化器中使用它:

Rails.application.routes.url_helpers.bills_url

在开发中,一切正常。 但是,在Heroku上,这会引发错误:

undefined method 'bills_url' for # (NoMethodError)

如果我转储Rails.application.routes.url_helpers.methods ,则不会列出_url_path方法。 但是,如果我在控制台中运行相同的代码,它们就是:

 heroku run rails c --app myapp > Rails.application.routes.url_helpers.methods > # => :bills_url is present 

这很奇怪。 这有什么线索吗? Heroku是否使url_helpers不可用? 我绝对迷路了。 我google了很多但没有发现任何东西。

这是完整跟踪的错误报告 。

谢谢。

我有同样的问题,发现是由于两个原因引起的:

首先,在类常量中使用Rails.application.routes.url_helpers方法,如下面的代码片段所示:

 class myObject include ActiveModel::Model attr_accessor :id, :link DEFAULT_OBJECT = new id: 1, link: Rails.application.routes.url_helpers.my_object_url({:id => 1}) ... end 

其次,在环境文件中设置config.eager_load = true

因此,当config.eager_load = true ,加载myObject类时尚未注册动态url助手。

这篇文章可能很有用 – > http://blog.arkency.com/2014/11/dont-forget-about-eager-load-when-extending-autoload/

克雷格的答案是正确的。 所以,因为在config/environments/production.rb我们有

 config.eager_load = true 

我们还需要添加以下内容:

 config.before_eager_load do Rails.application.reload_routes! end 

现在,您的代码中的任何位置都应该能够使用Rails.application.routes.url_helpers.*_pathRails.application.routes.url_helpers.*_url helpers。

就我而言,我试图在担忧中使用帮助者,并且遇到了同样的问题。 这对我来说就像是在生产中的魅力……当然,我花了太长时间来解决这个问题! ;)