2013-02-19 71 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

相關問題