Rails 5 - config.assets.compile 应该设置为true - 为什么?

9

我正在开发Rails 5应用程序并使用资产管道。在开发模式下它运行良好,但如果我尝试在生产模式下运行它,则无法正确加载图像和样式。我检查并发现这是因为

config.assets.compile = false

在config/environments/production.rb中

除非我将其设置为true,否则根本不起作用。我知道实时编译对于生产并不好,有什么解决方案?

2个回答

16

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

资产编译

config.assets.compile = true

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

RAILS_ENV=production bin/rails assets:precompile

通常情况下,如果您使用Capistrano部署,它会处理这个问题。

资产服务

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

config.public_file_server.enabled

这个描述了Rails是否应该从public/assets目录中提供编译后的文件。在开发中,你希望它这样做,因此默认为true。在生产环境中,通常不希望启动Web服务器来提供标志图像或CSS文件,因此您可能会将资产编译然后单独托管它们(例如,在像Cloudfront这样的CDN上)。如果您仍希望在生产中提供它们,可以使用以下方式启动Rails:

RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production bin/rails server

1

首先预编译你的资产。

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


2
我已经使用了预编译语句,并在公共目录中生成了文件。但是仍然存在相同的问题。 - Alex

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