2013-02-19 75 views
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上的问题 - 这是问题的一部分。但是,他们无法解决发展中出现的这个问题。

回答

2

如果在某段时间内没有访问Heroku,Heroku会关闭您的应用以节省资源。因此,缓慢是由于必须重新启动整个应用程序而导致的。

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

为了解决这个问题,你可以使用诸如New Relic插件之类的服务,它会每隔一段时间就会ping你的应用程序,以停止停止。

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

+0

这些日志是为我的开发环境 - 而不是Heroku。我对资产编译所做的唯一更改是在我的'config/application.rb'中,我设置了'config.assets.initialize_on_precompile = false',正如我在问题中所述。 – marcamillion 2013-02-19 08:07:48

+0

另外.....这是有道理的....但它并不能完全解释为什么本地的第一个请求也需要永远。即在开发中,为什么当我将我的机器从睡眠中唤醒时,第一个请求需要很长时间?我是否应该使用精简运行退出终端会话,并在唤醒我的MacBook睡眠时重新启动服务器,或者有其他事情发生? – marcamillion 2013-02-19 08:12:18

+0

一旦我安装了New Relic,我是否必须专门配置它以告诉它每小时都能ping我的应用程序?或者一旦我安装它,它会自动地做到这一点? – marcamillion 2013-02-19 08:28:38

1

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

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

+0

啊......对。但是在开发中呢?这就是那些日志的用途......我的开发环境。 – marcamillion 2013-02-19 08:41:12

相关问题