没有路线匹配[获取]/资产

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我有一个Rails应用程序,我正试图在生产环境中进行测试。我跑了RAILS_ENV=production rake assets:precompile它在/public/Asset中生成了我所有的资产。问题是当我启动我的应用程序时RAILS_ENV=production rails s thin我得到:

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

你要么设置成true或者使用真正的服务器,比如Apache或Nginx,这将为静态资产提供服务。

如果在Heroku,他们建议使用rails_12factor默认情况下启用此设置的GEM。把宝石放进production你的小组Gemfile,就像这样:

group :production do
  gem 'rails_12factor'
end
用户回答回答于

除了Ryan上面说的话之外,Rails资产管道指南还描述了如何设置Apache或nginx来为您提供静态资产。

确实应该设置nginx或Apache来提供静态资产,因为它们比mongrel/瘦/unicorn更适合这个任务。

扫码关注云+社区