1

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

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

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

如果我将文件/文件夹权限设置为:

    chmod -R 755 

但这不会影响新文件。

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

作为 linux 系统管理员,我是个菜鸟。你能建议我哪里出错了吗?

非常感谢

4

2 回答 2

1

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

有关维基的更多信息

于 2012-05-25T17:09:42.270 回答
0

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

脚步

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

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

    cd /path/to/site
    chmod -R g+ws *
    chgrp -R www *
    
  3. 杀死根帐户下现有的延迟作业进程

  4. 更新了站点虚拟主机以告诉乘客以哪个用户身份运行

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

    set :user, "www"
    

现在延迟的工作流程和站点流程以“www”运行,这解决了我的问题。

于 2012-06-01T13:45:04.787 回答