【问题标题】:Why does Heroku re-compile my assets after the application has been idle for a while?为什么 Heroku 在应用程序空闲一段时间后重新编译我的资产?
【发布时间】:2012-06-04 00:02:25
【问题描述】:

在生产中(在 Heroku 上),资产不应该在启动时编译一次,然后再编译一次吗?

/production.rb
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true

当有人有一段时间没有点击我的应用程序时,事情就会闲置,当新的请求进来时,资产似乎会重新编译???

知道我做错了什么吗?

【问题讨论】:

  • 这是个好问题。我意识到它经常发生在没有任何流量的应用程序上。我有一个流量非常低的应用程序,我绕过它的方法是缓存应用程序的主页。我可能做错了,但似乎有很大的不同。
  • 您在 Cedar 堆栈上吗?是否在您的日志中显示资产正在重新编译?还是只是需要很长时间?
  • Cedar 堆栈,如果我有一段时间没有访问该站点,它会显示资产重新编译,并且第一个请求会导致超时,因为它需要超过 30 秒。

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


【解决方案1】:

在 Heroku 上,如果您的应用程序空闲一个小时,dynos 将进入待机状态。这就是为什么当您重新访问您的应用程序时,第一次加载需要一些时间。您提到“启动”时间 - 这正是您的测功机重新启动后发生的情况,您的实例在您推送后不会连续运行。

当测功机恢复活力时,您的资产将需要预编译,因为您已将 config.assets.compile 设置为 false。这种行为确实不寻常。

如果您想避免这种情况,您可以每半小时将一个 cron 作业设置为 curl 您的 heroku 实例。

【讨论】:

  • 我喜欢每小时执行一次 cron 作业的想法。看起来比我现在做的更干净
  • @Vezu 在略不到一小时的时间内可能是安全的。只是因为您不希望测功机闲置。说实话,这是非常不道德的,因为测功机闲置出于某种原因
  • 他们关闭是有原因的,但我认为它们会影响启动应用程序。我将 Rails 仅用于 JSON 数据,然后在 iphone 应用程序上使用。
  • 谢谢。通常不会有问题,但第一个请求会导致我们的应用程序超时。
  • 这很烦人。只是为了让您知道您正在构建的产品是否已准备好成为焦点,heroku 上的付费计划可防止 dynos 闲置 - 也就是说,如果您坚持使用 heroku。
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2016-12-22
相关资源
最近更新 更多