0

我正在使用 Rails 3.2.x 和 Thin 1.5.0,最初加载我的应用程序时,如果 24 小时没有加载它,它需要很长时间。起初我以为它只是我的 macbook - 因为它处于睡眠模式,并且第一次无论出于何种原因它都需要永远。

但是,我意识到它在 Heroku 上也是如此,对其他人也是如此。就像他们有一段时间没有访问 Heroku 网站一样,他们第一次加载它(不是每次,但有时)需要永远。

根据日志,我的样式表的编译似乎需要很长时间。不过,我感到困惑的是,当我推送到 Heroku 时,它应该在推送期间编译资产……对吗?因此,从理论上讲,这不应该是减缓生产速度的原因。还是我错过了什么?

尽管最近 Heroku 一直在拒绝推送,所以我不得不启用它:

# Don't initialize app on pre-compile
  config.assets.initialize_on_precompile = false

所以我不确定这是否是造成它的原因。

Started GET "/" for 127.0.0.1 at 2013-02-19 02:44:14 -0500
Processing by HomeController#index as HTML
  Category Load (56.6ms)  SELECT "categories".* FROM "categories" LIMIT 6
  EXPLAIN (14.6ms)  EXPLAIN QUERY PLAN SELECT "categories".* FROM "categories" LIMIT 6
EXPLAIN for: SELECT  "categories".* FROM "categories"  LIMIT 6
0|0|0|SCAN TABLE categories (~1000000 rows)

  Banner Load (44.4ms)  SELECT "banners".* FROM "banners" INNER JOIN "banner_types" ON "banner_types"."id" = "banners"."banner_type_id" WHERE (banner_types.name = 'Featured')
  Banner Load (0.3ms)  SELECT "banners".* FROM "banners" INNER JOIN "banner_types" ON "banner_types"."id" = "banners"."banner_type_id" WHERE (banner_types.name = 'Side')
  Product Load (3.4ms)  SELECT "products".* FROM "products" 
  Vendor Load (15.9ms)  SELECT "vendors".* FROM "vendors" 
  User Load (50.0ms)  SELECT "users".* FROM "users" 
  EXPLAIN (0.1ms)  EXPLAIN QUERY PLAN SELECT "users".* FROM "users" 
EXPLAIN for: SELECT "users".* FROM "users" 
0|0|0|SCAN TABLE users (~1000000 rows)

  Vendor Load (0.3ms)  SELECT "vendors".* FROM "vendors" WHERE "vendors"."id" = 12 LIMIT 1
  Vendor Load (0.2ms)  SELECT "vendors".* FROM "vendors" WHERE "vendors"."id" = 11 LIMIT 1
  Vendor Load (0.2ms)  SELECT "vendors".* FROM "vendors" WHERE "vendors"."id" = 10 LIMIT 1
  CACHE (0.0ms)  SELECT "vendors".* FROM "vendors" WHERE "vendors"."id" = 12 LIMIT 1
  CACHE (0.0ms)  SELECT "vendors".* FROM "vendors" WHERE "vendors"."id" = 12 LIMIT 1
  CACHE (0.0ms)  SELECT "vendors".* FROM "vendors" WHERE "vendors"."id" = 10 LIMIT 1
  Rendered home/_popular_products.html.erb (303.0ms)
  Rendered home/_popular_stores.html.erb (2.4ms)
  Rendered home/index.html.erb within layouts/application (570.6ms)
Compiled main.css  (20360ms)  (pid 86898)
Compiled application.css  (2366ms)  (pid 86898)
  Rendered layouts/_login_nav.html.erb (1.0ms)
  Rendered layouts/_navigation.html.erb (1.7ms)
  Rendered layouts/_header.html.erb (47.3ms)
  Rendered layouts/_messages.html.erb (0.2ms)
  Rendered layouts/_footer.html.erb (0.5ms)
Completed 200 OK in 38402ms (Views: 30707.1ms | ActiveRecord: 1830.8ms)

想法?

编辑1:

请注意,这个问题尚未得到充分回答。回复都谈到了 Heroku 上的问题——这是问题的一部分。但是,他们未能解决开发中发生的这个问题。

4

2 回答 2

2

如果在一定时间内未访问 Heroku,它将关闭您的应用程序以节省资源。因此,缓慢是由于必须再次启动整个应用程序造成的。

有关更多信息,请参阅https://devcenter.heroku.com/articles/dynos上的 Dyno Idling。

为了解决这个问题,您可以使用诸如 New Relic 插件之类的服务,它会每隔一段时间对您的应用程序执行 ping 操作,以阻止减速。

您还应该在部署时编译资产,而不是按需编译。Heroku 默认应该这样做——你做了什么改变来阻止它发生?

于 2013-02-19T08:02:03.903 回答
1

如果您在 Heroku(免费计划)上只有 1 个 dyno,那么它会在一段时间后闲置以节省资源。然后,当有人在一段时间后访问您的应用程序时,它将再次启动。

因此,第一个访问您的应用程序的人将不得不等待一段时间。

于 2013-02-19T08:02:46.017 回答