无需重新启动rails服务器即可更新资产

时间:2012-12-21 13:44:58

标签: ruby-on-rails ruby-on-rails-3.2 asset-pipeline thin

所以问题基本上归结为:

如何在不需要重新启动服务器的情况下有效处理生产环境中的更改资产?

我们遇到的问题是,我们必须重新启动运行应用的瘦服务器才能提供更新的javascript文件。

一些背景:

现在我们每小时从一些长时间运行的任务生成数据到javascript文件中,这样我们就可以在我们的Rails应用程序中使用它了。
为了清楚起见,我们更新/覆盖现有文件,而不是添加新文件。

生成后,我们运行这些命令以重新预编译所有资产。

bundle exec rake assets:precompile
bundle exec rake rails_group=assets assets:clean RAILS_ENV=production

在清除浏览器缓存并重新加载页面后,我们仍在为旧资产提供服务。

你们有没有做过类似的经历;你做了什么来解决它?

PS。祝大家节日快乐!

2 个答案:

答案 0 :(得分:2)

所以,我们最终做的就是让rails通过设置

来提供静态资产

config.serve_static_assets = trueconfig/environments/production.rb

并将频繁更改的javascript数据文件放入public/下的目录结构中。 这有效,因为它还将资产和数据分成不同的位置。

答案 1 :(得分:0)

根据Rails指南:

  

6缓存的工作原理Sprockets使用默认的Rails缓存存储   缓存开发和生产中的资产。

Rails会缓存你的资产,除非你告诉它不要缓存它们。资产管道的重点是通过鼓励浏览器和服务器以及rails服务器本身缓存资产来尽快为资产提供服务。

如果您的用例涉及经常重做资产,可能资产管道不适合您。