移动文件并拒绝Rake权限

时间:2016-07-14 16:14:38

标签: ruby-on-rails linux ruby-on-rails-4 permissions rake

我有一个Rake,服务器使用FileUtils.mv将处理后的文件从一个文件夹移动到另一个文件夹,如下所示:

FileUtils.mv('/path-to-upload-folder/'+filename, '/path-to-imported-folder/'+filename) if File.exist?('/path-to-upload-folder/'+filename)

如果我从rails服务器中运行此命令(我的操作是rake任务的副本,只是为了控制器内的调试简单),一切都很顺利(可能是因为我以root权限运行服务器)与rvmsudo)。 从Rake任务运行时,我收到一个权限被拒绝的错误,如此

Errno::EACCES: Permission denied @ sys_fail2 - 

源文件夹称为上载,目标文件夹是导入的文件夹。遵循权限以及文件夹的用户和组

drwxr-xr-x  2 malatini malatini   4096 lug 14 14:26 imported/
drwxr-xr-x  2 www-data www-data 135168 lug 14 14:26 uploads/

malatini是我当前的用户。 我知道从两个文件夹运行原始mv我需要成为一个sudo用户,但为什么我可以在Rails服务器中运行相同的命令而没有任何问题?

我还尝试更改目标文件夹的权限和所有者/组,但没有运气。

阅读here我认为问题是正在运行rake任务的用户。如果我手动运行rake任务,或者如果它作为cron作业运行,则会发生同样的问题。

我在

下运行
Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux

有什么建议吗?

修改

正如@Nic Nilov建议我尝试更改源和目​​标foleders的所有者和组,实际上我设法执行mv,因此rake任务,将两个文件夹的所有者和组更改为malatini

drwxr-xr-x  2 malatini malatini   4096 lug 14 14:26 imported/
drwxr-xr-x  2 malatini malatini 135168 lug 14 14:26 uploads/

但是这样,apache(负责将文件移动到上传文件夹)无法写入uploads文件夹。没有其他配置正常工作(不仅是上传文件夹组,也不是777到导入文件夹)。

1 个答案:

答案 0 :(得分:1)

你基本上回答了自己的问题。这是一个权限问题,与尝试移动操作的OS用户有关。它可以在Rails中运行,因为正如您所说,您使用rvmsudo运行它。

两种方法是从特权用户运行rake任务或在两个文件夹上设置所有权,以便允许您运行rake下的当前用户执行mv

在您的文件夹中,用户和组都设置为相同。您可以将其组设置为运行rake的用户组,例如:

chgrp malatini ./uploads

这会使malatini组成为两个文件夹的所有者:

drwxr-xr-x  2 malatini malatini   4096 lug 14 14:26 imported/
drwxr-xr-x  2 www-data malatini 135168 lug 14 14:26 uploads/

哪个应允许mv操作。

<强>更新

在特权用户下运行rake并从cron执行此操作时,为避免将密码存储在任何位置,您可以使用NOPASSWD指令。

有关详情,请参阅this askubuntu answer