Rails 生产静态文件路由错误
Posted
技术标签:
【中文标题】Rails 生产静态文件路由错误【英文标题】:Rails production static files routing error 【发布时间】:2011-06-23 03:28:27 【问题描述】:当我在本地测试/开发中运行我的应用程序时,我的视图很好,一切都很愉快。当我尝试导航到远程服务器/本地生产服务器上运行的相同 erb 文件时,我收到如下错误:
ActionController::RoutingError (No route matches "/stylesheets/scaffold.css")
我在这里看到过类似的问题,但没有一个能够解决我的问题。我找到的最接近答案的是这里的第一个答案:Rails 404 error for Stylesheet or javascript files
据我了解,最好的办法是配置我的网络服务器以提供静态文件。如何在本地/在 Heroku 上执行此操作?
更新
根据 raidfive 的建议,我将 config.serve_static_assets 从 false 更改为 true,这解决了我的问题。但是,我看到它在 production.rb 中说 Apache 或 nginx 应该已经在提供静态资产。以这种方式提供静态资产是否不那么好/不专业?如果是这样,如果我使用 Heroku,我将如何实现预期的结果?
更新 2
显然 Heroku does this automatically,我有一个额外的逗号导致了恶作剧。我可以使用following tip 查看扩展的 Heroku 日志以找出问题所在。谢谢!
【问题讨论】:
【参考方案1】:在 Rails5 中,你应该注释
"config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?"
在config/enviroment/production.rb
【讨论】:
【参考方案2】:您使用的是 Rails 3 吗?默认情况下,Rails 3 / webrick 在生产模式下不提供静态文件。您可以通过设置轻松启用此功能
config.serve_static_assets
到 true
在您的 production.rb
文件中。
【讨论】:
啊哈,我以为可能是这样的。但是,我在设置上方的评论中注意到,它说 apache 或 nginx 应该已经这样做了。我应该在我的服务器中设置什么吗? 忽略这一点,显然这是 Heroku 自动执行的操作。我的问题是由于某种原因我的本地服务器忽略了逗号的错误放置。感谢您的帮助! 啊,没问题。是的,我认为 Heroku 有一个关于他们如何处理静态资产的文档页面,如果你想阅读的话。 我根据上述建议修改了config/environments/production.rb
以提供静态资产,但对于 Heroku 部署的应用程序(登录页面或根)仍然出现 404 错误。以上是关于Rails 生产静态文件路由错误的主要内容,如果未能解决你的问题,请参考以下文章