2012-06-25 34 views
1

我有一個網站有一些靜態內容。它包含幾頁,CSS,JavaScript和圖像。我想在Heroku上免費提供這個功能,我知道我可以使用他們的一個網頁動態計劃。我的問題是,爲什麼他們的文檔建議在單個網頁動態主機上託管靜態內容?在一臺網絡測試儀上運行Rails或Sinatra會遇到什麼問題?並且使用機架只能以某種方式解決這些問題?爲什麼推薦使用一個Heroku web dyno機架?

+0

我認爲他們推薦機架,因爲它對靜態內容更輕量級? –

+0

是的,但究竟是什麼意思? – Bradford

+0

你能鏈接到建議Rack的文檔頁面嗎,所以我們可以看看上下文嗎?看起來他們可能不推薦使用Rack來獲取靜態內容(或Rack一般而不是像Sinatra/Rails這樣的「基於Rack的」框架),因爲靜態內容只能由Nginx提供,甚至不會影響您的堆棧。換句話說,如果你只有html/js/css/images,並且請求正在觸發你的堆棧,那麼你做錯了什麼。我的博客是Heroku上的Rails應用程序,它將所有內容緩存到.html文件中。 Rails甚至不需要啓動。 – danneu

回答

1

Rails和Sinatra都是基於機架的,所以如果你只是擁有靜態內容(比如嚴肅的.html頁面),那麼使用裸機架工作得非常好。

我把樣品庫比在https://github.com/jwo/rack-static-sample

的想法是你rackup文件(config.ru)只是簡單的在你的公共目錄中的文件的響應(這個版本只是一個單一的index.html)

use Rack::Static, 
    :urls => ["/stylesheets", "/images"], 
    :root => "public" 

run lambda { |env| 
    [ 
    200, 
    { 
     'Content-Type' => 'text/html', 
     'Cache-Control' => 'public, max-age=86400' 
    }, 
    File.open('public/index.html', File::RDONLY) 
    ] 
} 
+0

我在尋找它爲什麼「效果很好」。以及爲什麼其他人不能很好地工作。 – Bradford

+2

Sinatra和Rails將工作。但是你增加了Sinatra的複雜性和加載時間,然後用Rails增加了更多。所以更多的時間花在框架內部。隨着機架,你「更接近金屬」,所以你的IO綁定比CPU綁定更多。 –

1

建議這樣做,因爲它是針對問題的「最簡單」解決方案。爲什麼要使用Rails或Sinatra框架來處理傳入的請求,如果代碼沒有任何內容可以處理,那麼通過數百/數千行代碼就可以處理傳入的請求。

但是,如果您希望託管一個靜態網站,我會強烈推薦任何AWS S3,Github Pages或Google Drive over Heroku。 Heroku上的單個測試計劃可能是免費的,但那是因爲它會在一段時間後閒置,並且不會花費它們的資源。第一個進入怠速測功機的請求往往需要額外的5-15秒。