在ubuntu上以root身份运行的延迟作业进程

时间:2012-05-25 16:15:47

标签: ruby-on-rails linux delayed-job file-permissions

我有一个Rails网站,它使用Delayed Job Gem来运行后台任务。后台任务采用PDF并将其转换为一系列图像。

Rails应用程序以'nobody'身份运行,延迟的作业流程以'root'身份运行。

后台任务运行正常,但当Rails应用程序尝试删除由延迟作业进程创建的文件时出现问题:我收到“权限被拒绝”消息。所以'nobody'无法删除'root'创建的文件。

如果我使用以下命令设置文件/文件夹权限,则可以解决此问题:

    chmod -R 755 

但这不会影响新文件。

我正在使用根帐户下的Capistrano部署我的Rails应用程序。

我非常喜欢linux系统管理员。你能建议我哪里出错吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

delayed_job提供了自己的Capistrano配方,应该能够使用与您的应用相同的用户来启动/停止服务器。您基本上只需要在require "delayed/recipes"文件中deploy.rb。然后,您可以使用cap delayed_job:startcap delayed_job:stop远程启动/停止delayed_job。

更多信息on the wiki

答案 1 :(得分:0)

所以我按照水手的建议解决了我的问题:基本上设置一个新用户来运行应用程序和部署。不确定这对其他人是否有用,但这里是我如何将网站转移给其他用户:

步骤

  1. 创建一个名为“www”的新用户

    useradd -d /home/www -m
    passwd www
    
  2. 对现有文件进行www控制:

    cd /path/to/site
    chmod -R g+ws *
    chgrp -R www *
    
  3. 在root帐户下销售现有的delayed_job流程

  4. 更新了网站vhost,告诉乘客运行哪个用户

    PassengerDefaultUser  www
    
  5. 告诉上限以在deploy.rb中使用用户www进行部署

    set :user, "www"
    
  6. 现在延迟的工作流程和网站流程以'www'运行,这解决了我的问题。