2011-12-08 26 views
0

我有一個failed: "sh -c 'cd /var/www錯誤。然後,通過在deploy.rb加入以下固定它...爲什麼我在獲得權限時拒絕在capistrano生成的文件上部署錯誤?

set :default_environment, { 
    'PATH' => "/var/lib/gems/1.9.1/bin:$PATH" 
} 

現在我得到這個新的錯誤。

** [out :: ip.address] Rails Error: Unable to access log file. Please ensure that /var/www/releases/20111208152807/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed. 
** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets 
** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets 
** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets 
** [out :: ip.address] 
** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets 
** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets 
** [out :: ip.address] 
** [out :: ip.address] rake aborted! 
** [out :: ip.address] 
** [out :: ip.address] Permission denied - /var/www/releases/20111208152807/public/assets/manifest.yml 

所以我用ls -lha檢查了manifest.yml和production.log的權限,而且它們是由root擁有的。

capistrano 部署由擁有/ var/www目錄的linux用戶(不是root用戶)完成。我猜這是因爲無論什麼命令創建這些文件都讓他們擁有所有權。

CLARIFICATION: 我知道,可能只是使用根部署將解決問題,但我不想使用root。

+0

你在使用什麼Web服務器,根本不應該擁有這些文件。 –

+0

這就是我的想法,那些由部署創建的文件,而不是我。我正在使用Apache。 – leonel

+0

好吧,讓我們看看這裏,試試'ps aux | grep apache'並查看Apache正在運行的用戶。還有,你需要將日誌文件的權限設置爲0666,就像消息所要求的那樣? –

回答

5

您絕對不應該擁有root擁有的網絡應用程序文件,它們應該由非特權用戶擁有。雖然用戶在網絡服務器和網絡服務器設置方式上有所不同,但用戶通常是www-data(對於Apache)或nobody(對於Nginx)。

,並刪除你的錯誤,你想運行在錯誤中提到的命令:

chmod 0666 /var/www/releases/20111208152807/log/production.log將設置文件的讀取寫入權限爲每個用戶。

這些權限可能有點寬容,所以如果您覺得需要,可以限制它們。

+0

chmod 0666修復了它,但我仍然困惑,爲什麼我首先得到了這個錯誤。如果我再次得到相同的錯誤,我可能也會嘗試這個http://stackoverflow.com/questions/2469059/cant-access-log-files-in-production – leonel

+1

你永遠不應該有你的Web應用程序文件擁有(可寫)的運行應用程序的同一用戶。這是如何安裝rootkit的。如果Web應用程序被利用,您希望文件系統權限阻止攻擊者修改您網站的代碼。 –

相關問題