Rails 4生产环境中assets显示404错误

5

我从Java环境转到Rails,对于Rails 3到4中的资产管道(asset pipeline)有一些困惑。

我目前使用的是Rails 4.2.5,在本地环境创建了一个样例应用程序。我在app/assets/javascripts目录下创建了一个新的JavaScript文件,并在视图中引用它,一切在本地环境都运行良好。

之后,我想测试一下在生产环境中的表现。这是我所做的步骤:

  1. RAILS_ENV=production rake assets:clean assets:precompile [所有文件都会在public/assets下生成]
  2. 以生产模式启动服务器 rails server -e production
  3. 现在当我浏览页面时,我得到了这个错误:"NetworkError: 404 Not Found - http://localhost:3000/assets/application-c5c431cb7c0a202f831a634922aaf1d536712002ae74334fb03ba4698b32b84c.js" 在firebug中。

当搜索了一些线程后,他们建议添加 config.assets.compile = true。但我不认为这是解决方案,因为它会降低应用程序的速度。

请帮忙解决。

1个回答

6
默认情况下,Rails4会返回404错误,如果一个资源没有通过外部代理(如Nginx)处理。 - https://github.com/heroku/rails_serve_static_assets 我建议您查看rails_12factor gem,其中包括rails_serve_static_assets gem,可以让您的Rails应用程序提供静态资源(如.js文件)。
编辑:
您可能不需要使用gem来实现这个功能(尽管我没有尝试过):

config.serve_static_files 配置Rails本身来服务静态文件。默认为true,但在生产环境中被关闭,因为用于运行应用程序的服务器软件(例如NGINX或Apache)应该代替提供静态资产。与默认设置不同,当使用WEBrick在生产模式下运行(绝对不推荐!)或测试您的应用程序时,将此设置为true。否则,您将无法使用页面缓存,并且在公共目录下定期存在的文件的请求仍将命中您的Rails应用程序。 - http://guides.rubyonrails.org/configuring.html

在Rails 5中,此配置方法已更名为config.public_file_server.enabled,rails_serve_static_assets gem会根据版本处理正确的命名。


谢谢,config.serve_static_files按照我们的期望正常工作了。这真是令人沮丧。你救了我的一天。 - Deepak Kumar Padhy
@DeepakKumarPadhy 如果它有帮助,请接受答案。 - Nithin
谢谢@Lucas Nelson...昨晚和今天早上我都在解决这个问题。这确实很有帮助。 对我来说,我选择/使用的是添加12factor gem。 - MrWater

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