我正在开发Rails 5应用程序并使用资产管道。 它在开发模式下运行良好,但是如果我尝试在生产模式下运行它,它就无法加载图像和放大器。风格正确。 我查了一下,发现是因为
在config / environments / production.rb 中config.assets.compile = false
除非我将其设置为true,否则它根本不起作用。 我知道实时编译不适合生产,什么是解决方案?
答案 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文件。