Rails生产环境静态文件路由错误

16
当我在测试/开发环境中本地运行我的应用程序时,我的视图显示得很好,一切都很顺利。但是当我尝试访问在远程服务器/本地生产服务器上运行的相同erb文件时,我会遇到以下错误:
ActionController::RoutingError (No route matches "/stylesheets/scaffold.css")

我在SO上看到了类似的问题,但没有一个能解决我的问题。我找到的最接近答案的是这里的第一个答案: Rails 404 error for Stylesheet or JavaScript files

据我所知,最好的方法是配置我的Web服务器来提供静态文件。我如何在本地/Heroku上做到这一点?

更新

根据raidfive的建议,我将config.serve_static_assets从false更改为true,这解决了我的问题。然而,我看到production.rb中说Apache或nginx应该已经提供静态资产。以这种方式提供静态资产是否有所不足/不专业,如果是这样,我将如何实现期望的结果,如果我正在使用Heroku?

更新2

显然,Heroku 自动执行此操作,我有一个额外的逗号引起了麻烦。我能够使用以下提示查看扩展的Heroku日志跟踪问题。谢谢SO!

2个回答

33

你正在使用 Rails 3 吗?默认情况下,Rails 3 / WEBrick 在生产模式下不会提供静态文件。你可以通过在 production.rb 文件中设置 config.serve_static_assetstrue 来轻松启用它。


啊哈,我就知道可能是这样。然而,在上面的注释中,我注意到设置中说apache或nginx应该已经做到了这一点。那么我需要在我的服务器上设置什么吗? - keybored
忽略那个,显然这是Heroku自动处理的事情。我的问题是一个逗号放错了位置,而我的本地服务器不知何故忽略了它。感谢您的帮助! - keybored
啊,没问题。是的,如果你想了解他们如何处理静态资源,我认为Heroku有一个文档页面可以阅读。 - raidfive
根据上述建议,我修改了 config/environments/production.rb 以提供静态资源,在 Heroku 部署的应用程序中仍然出现404错误(着陆页或根目录)。 - Avid Programmer

1
在Rails5中,你应该注释掉:


"config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?" 

config/enviroment/production.rb中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接