我有一个 Rails 应用程序,正在尝试在生产环境中进行测试。我运行了 RAILS_ENV=生产 rake asset:precompile
,它在/public/assets 中生成了我的所有 Assets 。问题是,当我启动我的应用程序时,我得到:
ActionController::RoutingError (No route matches [GET] "/assets/application-eff78fd67423795a7be3aa21512f0bd2.css"):
此文件确实存在于 /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css
中。
对于为什么我收到此 RoutingError
有什么想法吗?
最佳答案
在生产模式下,Rails 将不负责提供静态资源。因此,您会收到此错误。 Thin 也不会这样做,因为它只是 Rails 的包装。
这由应用程序中 config/environments/Production.rb
中的此设置控制:
config.serve_static_files = false
或者在 Rails 5 中:
# config/environments/production.rb
config.public_file_server.enabled = true
或将 ENV['RAILS_SERVE_STATIC_FILES']
设置为 true。
您可以设置为 true
或使用真正的服务器(例如 Apache 或 Nginx)来提供静态 Assets 。我怀疑 Pow 也可能这么做。
如果您使用 Heroku,他们建议使用 rails_12factor
gem,它默认启用此设置。将 gem 放入 Gemfile
中的 product
组中,如下所示:
group :production do
gem 'rails_12factor'
end
关于ruby-on-rails - 没有路由匹配 [GET]/assets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829480/