2012-05-25 31 views
1

我有一個使用Delayed Job Gem運行後臺任務的Rails站點。後臺任務需要一張PDF並將其轉換爲一系列圖像。在ubuntu上以超級用戶身份運行的延遲作業進程

Rails應用程序以「nobody」運行,延遲的作業進程以「root」運行。

後臺任務運行正常,但Rails應用程序嘗試刪除由延遲的作業進程創建的文件時出現問題:我收到了'Permission denied'消息。所以'沒有人'不能刪除'root'創建的文件。

的問題可以是固定的,如果我設置的文件/文件夾的權限有:

chmod -R 755 

但這並不影響新文件。

我在根帳戶下使用Capistrano部署我的Rails應用程序。

我很喜歡作爲linux系統管理員的noob。你能建議我哪裏出錯嗎?

非常感謝

+0

我更喜歡使用名爲rails(或www,或其他)的相同用戶來運行我的rails應用程序和延遲作業。您可以告訴capistrano使用set:user'username'與您想要的用戶進行部署,並且我認爲延遲作業會與安裝該gem的用戶一起運行。 – sailor

+0

啊,那位'延遲的工作與安裝了gem的用戶一起運行'是有用的,我將不得不調查並嘗試使用不同的帳戶來運行。 – PeteG

回答

0

所以,我解決我的問題,通過以下水手建議:基本設置一個新的用戶運行應用程序和部署。不知道這將是有益的任何人,但在這裏就是我如何轉移的部位不同的用戶:

步驟

  1. 創建一個名爲「WWW」

    useradd -d /home/www -m 
    passwd www 
    
  2. 新用戶對現有文件給予www控制:

    cd /path/to/site 
    chmod -R g+ws * 
    chgrp -R www * 
    
  3. Killed existin root帳號下摹delayed_job的過程

  4. 更新了網站虛擬主機,告訴乘客該用戶運行的

    PassengerDefaultUser www 
    
  5. 泰爾帽deploy.rb

    set :user, "www" 
    
與用戶的WWW部署

現在延遲的作業流程和網站流程以「www」運行,解決了我的問題。

1

的delayed_job提供了自己的Capistrano的食譜,這應該可以用來啓動/使用相同的用戶爲您的應用程序停止服務器。你基本上只需要在你的deploy.rb文件中使用require "delayed/recipes"。然後,您可以使用cap delayed_job:startcap delayed_job:stop遠程啓動/停止delayed_job。

更多信息on the wiki

+0

是的,我在部署時使用這個配方,但它在root帳戶下運行'delayed_job'進程。 – PeteG

相關問題