Rails 5 - config.assets.compile应该是真的 - 为什么?

时间:2016-09-16 19:34:31

标签: ruby-on-rails ruby

我正在开发Rails 5应用程序并使用资产管道。 它在开发模式下运行良好,但是如果我尝试在生产模式下运行它,它就无法加载图像和放大器。风格正确。 我查了一下,发现是因为

  

config.assets.compile = false

在config / environments / production.rb

除非我将其设置为true,否则它根本不起作用。 我知道实时编译不适合生产,什么是解决方案?

2 个答案:

答案 0 :(得分:11)

有两个与在Rails服务器中提供资产相关的选项:

资产编译

config.assets.compile = true

指资产编制。也就是说,Rails是否应该在检测到资源的新版本存在时重新编译资产。在开发中,您希望将其设置为true,以便在编辑css文件时编译样式。在下一个请求中,Rails将自动重新编译资产。在生产时,您通常希望将其设置为false并在部署期间处理资产编译。为此,您必须运行

RAILS_ENV=production bin/rails assets:precompile

通常情况下,如果使用Capistrano进行部署,则需要注意这一点。

资产服务

与资产相关的第二个选项是

config.public_file_server.enabled

这描述了是否应该为public/assets目录中的编译文件提供Rails。在开发中,你想要它,所以默认情况下是这样。在生产中,您通常不希望启动Web服务器来提供徽标图像或css文件,因此您可能编译资产然后单独托管它们(例如,在像Cloudfront这样的CDN上)。如果您仍希望在生产中提供它们,可以使用以下命令启动Rails:

RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production bin/rails server

答案 1 :(得分:1)

首先预编译您的资产。

运行RAILS_ENV=production rake assets:precompile以在公共目录中生成样式表和js文件。