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

据我了解,最好的办法是配置我的网络服务器以提供静态文件。如何在本地/在 He​​roku 上执行此操作?

更新

根据 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_assetstrue 在您的 production.rb 文件中。

【讨论】:

啊哈,我以为可能是这样的。但是,我在设置上方的评论中注意到,它说 apache 或 nginx 应该已经这样做了。我应该在我的服务器中设置什么吗? 忽略这一点,显然这是 Heroku 自动执行的操作。我的问题是由于某种原因我的本地服务器忽略了逗号的错误放置。感谢您的帮助! 啊,没问题。是的,我认为 Heroku 有一个关于他们如何处理静态资产的文档页面,如果你想阅读的话。 我根据上述建议修改了config/environments/production.rb 以提供静态资产,但对于 Heroku 部署的应用程序(登录页面或根)仍然出现 404 错误。

以上是关于Rails 生产静态文件路由错误的主要内容,如果未能解决你的问题,请参考以下文章

带有 Webpack 和 Yarn 的 Rails 6 上的 ActionController 路由错误

静态文件在开发中提供但不在生产中提供

提供静态文件 django 1.9 生产错误

django 生产服务器中的静态文件

Django_生产环境静态文件配置

django 和 vue.js 生产错误:在 django 中运行 npm build 和链接静态文件后没有显示