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.*_path
和Rails.application.routes.url_helpers.*_url
helpers。
就我而言,我试图在担忧中使用帮助者,并且遇到了同样的问题。 这对我来说就像是在生产中的魅力……当然,我花了太长时间来解决这个问题! ;)
- ActionView :: Template :: Error(960.css未预编译)
- 在Production中找不到文件’twitter / bootstrap’
- Rails 4 – 如何在开发中使用sqlite3和使用Heroku生成PostgreSQL
- Ruby Rack Heroku:提供静态文件
- 如何在rails 4中管理多个css文件?
- 通过Heroku上托管的Rails上传和解压缩文件到S3?
- phusion乘客是否使用分叉,如果是,在哪里设置after_fork配置?
- ActiveRecord :: AdapterNotSpecified数据库配置未指定适配器
- 推送到Heroku时:应用程序中发生错误,无法提供您的页面。 请稍后重试