2011-04-06 211 views
8

我遇到了使用xsendfile和我的Rails 3應用程序的問題。帶符號鏈接的mod_xsendfile

我正在使用capistrano管理部署,並且在每個版本中都有一個共享/資產目錄的符號鏈接(例如/ var/www/site/releases/1234/assets =>/var/www/site /共享/資產)。問題是XSendFile似乎沒有遵循符號鏈接。在我的Apache日誌,我看到下面的錯誤:

The given path was above the root path: xsendfile: unable to find file: /var/www/site/releases/20110406205607/assets/pdfs/2/original/test.pdf 

我已在XSendFilePath配置設置爲

XSendFilePath /var/www/site/shared/assets 

如果我切換config來:

XSendFilePath /var/www/site/releases 

那麼一切工作正常。所以我有幾個問題:

1)有沒有辦法使XSendFilePath遵循符號鏈接?

2)將XSendFilePath設置爲我的發行版目錄是否存在安全風險?換句話說,我是否可以打開所有目錄的訪問權限?

task :storage_link, :except => { :no_release => true } do 
    run "ln -nFs #{deploy_to}/shared/assets #{latest_release}/assets" 
end 

這使得XSendFilePath看到該鏈接爲/var/www/site/current/assets這使它的根路徑內:

回答

7

您是否使用類似這樣的after "deploy:finalize_update"任務創建鏈接。

還要確保運行您的應用的用戶擁有/ var/www/site/shared/assets的寫權限。

+0

感謝您的回答。我已經從這個項目中走了出來,但你的答案肯定是有道理的。 – bostonou 2011-08-12 19:16:17

+1

直到使用'Pathname#realdirpath'解析符號鏈接時,這對我們纔有用。 – 2013-05-03 21:33:10

+0

它不適用於我,即使使用'路徑名#realdirpath' :( – wrzasa 2015-03-04 14:48:05