我有一个Rails网站,它使用Delayed Job Gem来运行后台任务。后台任务采用PDF并将其转换为一系列图像。
Rails应用程序以'nobody'身份运行,延迟的作业流程以'root'身份运行。
后台任务运行正常,但当Rails应用程序尝试删除由延迟作业进程创建的文件时出现问题:我收到“权限被拒绝”消息。所以'nobody'无法删除'root'创建的文件。
如果我使用以下命令设置文件/文件夹权限,则可以解决此问题:
chmod -R 755
但这不会影响新文件。
我正在使用根帐户下的Capistrano部署我的Rails应用程序。
我非常喜欢linux系统管理员。你能建议我哪里出错吗?
非常感谢
答案 0 :(得分:1)
delayed_job提供了自己的Capistrano配方,应该能够使用与您的应用相同的用户来启动/停止服务器。您基本上只需要在require "delayed/recipes"
文件中deploy.rb
。然后,您可以使用cap delayed_job:start
和cap delayed_job:stop
远程启动/停止delayed_job。
更多信息on the wiki
答案 1 :(得分:0)
所以我按照水手的建议解决了我的问题:基本上设置一个新用户来运行应用程序和部署。不确定这对其他人是否有用,但这里是我如何将网站转移给其他用户:
步骤
创建一个名为“www”的新用户
useradd -d /home/www -m
passwd www
对现有文件进行www控制:
cd /path/to/site
chmod -R g+ws *
chgrp -R www *
在root帐户下销售现有的delayed_job流程
更新了网站vhost,告诉乘客运行哪个用户
PassengerDefaultUser www
告诉上限以在deploy.rb中使用用户www进行部署
set :user, "www"
现在延迟的工作流程和网站流程以'www'运行,这解决了我的问题。