我正在使用内置的Webrick服务器在我的localhost:3000上的生产环境中测试我的Rails 4应用程序。当我运行RAILS_ENV=production bundle exec rake assets:precompile
时,资产将在公共场所重建并重建清单,但页面仍然使用以前的资产名称进行处理。
重新启动rails服务器会显示新资产。是否有一种不那么极端的方法来实现这一点,当我将其移植到运行Phusion Passenger的生产服务器时,这将如何表现。我真的不想重启Apache以使我的资产正常运转。
答案 0 :(得分:6)
如果您未更改资产的内容,预编译版本将与上一版本相同。如果您稍微更改它,指纹将会更改,只有在您设置config.assets.digest = true
时,应用才会请求新指纹。
无论如何,另一种解决方法是:
跑步:
rake assets:clean
然后,
rake assets:precompile
这使得资产管道中的所有内容都可以重新构建并提供新的服务。
Rails会在编辑内容时自动清除每个文件的缓存。
如果上述任何一项无效,请尝试以下操作:
config / environments / production.rb 中的 config.serve_static_assets = true
config.serve_static_assets配置Rails本身以提供静态资产。默认为true,但在生产环境中关闭,因为用于运行应用程序的服务器软件(例如Nginx或Apache)应该为静态资产提供服务。与默认设置不同,在运行时(绝对不推荐!)或使用WEBrick在生产模式下测试应用程序时将此设置为true。否则,您将无法使用页面缓存,并且对公共目录下经常存在的文件的请求将无论如何都会打到您的Rails应用程序。
参考:http://guides.rubyonrails.org/configuring.html#rails-general-configuration
希望有所帮助:)
答案 1 :(得分:2)
我们遇到了同样的问题,即使在尝试使用rake资产之后仍在提供旧资产:清理或资产:clobber以及最终服务器重启将解决问题。我们案件的罪魁祸首是独角兽。在使用mina和mina-unicorn部署我们的rails应用程序时,我们运行了rake资产:clobber,然后编译资产,然后最终重新启动unicorn。通过这样做,独角兽大师永远不会被阻止并继续显示旧资产。所以,我们改变了我们的mina部署脚本,而不是重新启动独角兽,我们停止了独角兽并重新启动它。这解决了这个问题。所以,关键步骤是
部署应用程序
运行rake assets:clobber
运行rake资产:预编译
停止独角兽
启动独角兽
这会破坏零停机的概念,但这比重启服务器更好。
我知道你使用乘客,但这些信息对其他人有帮助