在 Rails 4 生产环境中找不到资产的 404 错误
Posted
技术标签:
【中文标题】在 Rails 4 生产环境中找不到资产的 404 错误【英文标题】:404 not found error for assets in rails 4 production enviroment 【发布时间】:2016-04-06 03:52:17 【问题描述】:我是来自 java 环境的 Rails 新手。我对带有 3 到 4 轨的资产管道几乎没有混淆。
目前我在 rails 4.2.5 我在本地环境中创建了一个示例应用程序。 我从 app/assets/javascripts 内部创建了一个新的 js,并从视图中引用它,在我的本地环境中一切似乎都运行良好。
在此之后,我想用生产环境测试它是如何工作的。以下是我执行的步骤。
-
RAILS_ENV=production rake assets:clean assets:precompile [All the files created public/assets]
以生产模式启动服务器 rails server -e production
现在,当我浏览该页面时,我收到此错误,
"NetworkError: 404 Not Found - http://localhost:3000/assets/application-c5c431cb7c0a202f831a634922aaf1d536712002ae74334fb03ba4698b32b84c.js"
在萤火虫中。
搜索的话题很少,建议加config.assets.compile = true
。但我不认为这就是解决方案,因为它会减慢应用程序的速度。
请帮忙。
【问题讨论】:
【参考方案1】:默认情况下,如果资产没有通过 外部代理,例如 nginx。 - https://github.com/heroku/rails_serve_static_assets
我建议您查看rails_12factor gem,其中包括rails_serve_static_assets gem,它将允许您的Rails 应用程序提供静态资源(如您的.js 文件)。
编辑:
你可能不需要宝石(虽然我没有尝试过):
config.serve_static_files
将 Rails 本身配置为提供静态服务 文件。默认为true,但在生产环境中开启 关闭作为用于运行的服务器软件(例如 NGINX 或 Apache) 应用程序应该提供静态资产。与默认不同 在运行时将其设置为 true(绝对不推荐!)或 使用 WEBrick 在生产模式下测试您的应用程序。否则你不会 能够使用页面缓存和对定期存在的文件的请求 在公共目录下无论如何都会点击你的 Rails 应用程序。 - http://guides.rubyonrails.org/configuring.html
在 Rails 5 中,此配置方法已重命名为 config.public_file_server.enabled
,rails_serve_static_assets gem 会根据版本处理正确的命名。
【讨论】:
谢谢,config.serve_static_files 工作正常,符合我们的预期。这很令人沮丧。你拯救了我的一天。 @DeepakKumarPadhy 如果它有助于接受答案。 谢谢@Lucas Nelson ...我昨晚和今天早上都在为此奋斗了几个小时。这当然很有帮助。对我来说,我选择/工作的是添加 12factor gem。以上是关于在 Rails 4 生产环境中找不到资产的 404 错误的主要内容,如果未能解决你的问题,请参考以下文章
Rails:Webpacker 4.2 在 /app/public/packs/manifest.json heroku 中找不到应用程序
rails 4.1.0.rc1 nginx 和 unicorn 未在生产环境中提供资产