2013-04-23 79 views
0

我有一個Rails應用程序中的Sinatra應用程序,它提供一個目錄中的靜態資源。該應用程序被安裝在滑軌的路線是這樣的:Sinatra靜態資產空

mount BeanstalkdView::Server, :at => "/beanstalk"

當我運行這個地方它正常工作,使用薄,但是當我在我的測試服務器上運行(Nginx的/乘客)的靜態資產表現奇怪。對靜態文件的請求返回200 OK,但沒有內容。

我告訴Sinatra,我的靜態文件是通過set :public_folder, "#{root}/resources"在我的靜態文件中加載的,例如,一個包含#{request.env['SCRIPT_NAME']}/css/file.css的CSS文件。我證實這兩條路徑都是正確的。

+0

當您打開開發人員工具時,是否在網絡選項卡中收到任何錯誤? – Simpleton 2013-04-23 11:00:44

+0

不,狀態是200 OK。 – TTT 2013-04-23 11:04:37

回答

2

阿列克謝V的回答幫了我很多。最後,我解決了這個使用Nginx的正確的設置在production.rb

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'

確保重新啓動您的Rails應用程序,Nginx的,做在你的瀏覽器硬刷新需要的檔案。

欲瞭解更多信息查詢:http://jimneath.org/2011/04/05/rails-3-nginx-and-send_file.html

3

這是由於::Rack::Sendfile中間件在生產中的Rails 3.0.x中默認啓用(在3.1.x以後的任何環境中默認禁用)。

這個中間件非常簡單但功能強大。當你通過::Rack::File::Sinatra::StaticFile(或任何其他對象)迴應:path時,此中間件增加X-SendFile(對於Apache)或X-SendFile-Redirect(對於NGinx)並且不發送實際主體。所以Apache或NGinx將處理真正的文件傳送。這是在生產環境中爲靜態資產提供服務的一種很好且最有效的方式,但是您可能會禁用此中間件(如果您不想弄亂Nginx/Apache配置)。查找和下面的配置選項在config/environments/production.rb文件註釋:

config.action_dispatch.x_sendfile_header 

該配置選項用於指示Sendfile中間件要設置的頭(如果沒有指定,沒有做任何事情)。