【问题标题】:Updating assets without restarting rails server在不重启 Rails 服务器的情况下更新资产
【发布时间】:2012-12-21 13:44:58
【问题描述】:

所以问题基本上归结为:

如何在生产 Rails 环境中有效地处理不断变化的资产,而无需重新启动服务器?

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

一些背景:

现在,我们每小时一次将来自几个长时间运行的任务的数据生成到 javascript 文件中,以便我们可以在 Rails 应用程序中使用它。
需要明确的是,我们更新/覆盖现有文件,而不是添加新文件。

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

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

在清除浏览器缓存并重新加载页面后,我们仍在使用旧资产。

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

PS。祝大家节日快乐!

【问题讨论】:

  • 在您的应用程序文件夹中的服务器外壳上执行touch tmp/restart.txt
  • 触摸 tmp/restart 只对乘客有效,对瘦无效
  • 您的资产是指纹还是您在资产 URL 的查询字符串中使用时间戳? (guides.rubyonrails.org/…)如果你不使用这些技术,那么你得到的是陈旧的资产似乎是合乎逻辑的。您可能会即时打开编译,不要每小时运行一次预编译,只需进行清理
  • @systho,您实际上提出了一个非常有效的观点,实际上我什至没有考虑禁用资产管道。这可能会解决问题。

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


【解决方案1】:

所以,我们最终做的基本上是通过设置让 rails 也为静态资源提供服务

config.serve_static_assets = trueconfig/environments/production.rb

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

【讨论】:

    【解决方案2】:

    根据 Rails 指南:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多