我正在开发Rails 5应用程序并使用资产管道。在开发模式下它运行良好,但如果我尝试在生产模式下运行它,则无法正确加载图像和样式。我检查并发现这是因为
config.assets.compile = false
在config/environments/production.rb中
除非我将其设置为true,否则根本不起作用。我知道实时编译对于生产并不好,有什么解决方案?
我正在开发Rails 5应用程序并使用资产管道。在开发模式下它运行良好,但如果我尝试在生产模式下运行它,则无法正确加载图像和样式。我检查并发现这是因为
config.assets.compile = false
在config/environments/production.rb中
除非我将其设置为true,否则根本不起作用。我知道实时编译对于生产并不好,有什么解决方案?
在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
首先预编译你的资产。
运行RAILS_ENV=production rake assets:precompile
来在你的公共目录中生成样式表和js文件。