如何让Rails服务器刷新预编译资产?

时间:2014-04-20 12:58:06

标签: ruby-on-rails ruby-on-rails-4 asset-pipeline

我正在使用内置的Webrick服务器在我的localhost:3000上的生产环境中测试我的Rails 4应用程序。当我运行RAILS_ENV=production bundle exec rake assets:precompile时,资产将在公共场所重建并重建清单,但页面仍然使用以前的资产名称进行处理。

重新启动rails服务器会显示新资产。是否有一种不那么极端的方法来实现这一点,当我将其移植到运行Phusion Passenger的生产服务器时,这将如何表现。我真的不想重启Apache以使我的资产正常运转。

2 个答案:

答案 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部署脚本,而不是重新启动独角兽,我们停止了独角兽并重新启动它。这解决了这个问题。所以,关键步骤是

  1. 部署应用程序

  2. 运行rake assets:clobber

  3. 运行rake资产:预编译

  4. 停止独角兽

  5. 启动独角兽

  6. 这会破坏零停机的概念,但这比重启服务器更好。

    我知道你使用乘客,但这些信息对其他人有帮助