Rails.application.routes.url_helpers 崩溃的 Heroku 应用程序
Rails.application.routes.url_helpers crashing Heroku app
我正在构建一个 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。
谢谢。
我遇到了同样的问题,发现这是由于 2 个原因造成的:
首先,在 class 常量中使用 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 class 时动态 url 帮助程序尚未注册。
这篇文章可能有用 -> http://blog.arkency.com/2014/11/dont-forget-about-eager-load-when-extending-autoload/
Craig 的回答是正确的。所以,因为在 config/environments/production.rb
中我们有
config.eager_load = true
我们还需要添加以下内容:
config.before_eager_load do
Rails.application.reload_routes!
end
现在,在您的代码中的任何地方,您都应该能够使用 Rails.application.routes.url_helpers.*_path
和 Rails.application.routes.url_helpers.*_url
助手。
就我而言,我曾尝试使用助手来解决问题,并且遇到了与您相同的问题。这对我来说就像生产中的 heroku 的魅力一样……当然我花了太长时间才弄明白! ;)
我正在构建一个 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。
谢谢。
我遇到了同样的问题,发现这是由于 2 个原因造成的:
首先,在 class 常量中使用 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 class 时动态 url 帮助程序尚未注册。
这篇文章可能有用 -> http://blog.arkency.com/2014/11/dont-forget-about-eager-load-when-extending-autoload/
Craig 的回答是正确的。所以,因为在 config/environments/production.rb
中我们有
config.eager_load = true
我们还需要添加以下内容:
config.before_eager_load do
Rails.application.reload_routes!
end
现在,在您的代码中的任何地方,您都应该能够使用 Rails.application.routes.url_helpers.*_path
和 Rails.application.routes.url_helpers.*_url
助手。
就我而言,我曾尝试使用助手来解决问题,并且遇到了与您相同的问题。这对我来说就像生产中的 heroku 的魅力一样……当然我花了太长时间才弄明白! ;)