【问题标题】:Rails.application.routes.url_helpers crashing Heroku appRails.application.routes.url_helpers 使 Heroku 应用程序崩溃
【发布时间】:2015-03-24 00:40:20
【问题描述】:

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

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

Rails.application.routes.url_helpers.bills_url

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

undefined method 'bills_url' for #<Module:0x007f3a1eab8d58> (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 不可用?我完全迷路了。我用谷歌搜索了很多,但一无所获。

这是完整跟踪的bug report

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 heroku


    【解决方案1】:

    克雷格的答案是正确的。所以,因为在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 助手。

    就我而言,我试图在关注点中使用帮助程序,并且遇到了与您相同的问题。这对我来说就像是在制作中的 heroku 的魅力......当然,我花了太长时间才解决这个问题! ;)

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,发现是由于两个原因造成的:

      首先,在类常量中使用 Rails.application.routes.url_helpers 方法,如下面的 sn-p:

      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/

      【讨论】:

      • 感谢您的回复。我会调查一下,看看它是否能解决问题:-)
      猜你喜欢
      • 2019-02-06
      • 2011-10-03
      • 2015-04-22
      • 2016-11-20
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多