gpt4 book ai didi

ruby-on-rails - 在 Rake 权限被拒绝的情况下移动文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:04 24 4
gpt4 key购买 nike

我有一个 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 任务的副本,只是为了在 Controller 内部进行简单调试),一切正常(可能是因为我以 root 权限运行服务器使用 rvmsudo)。当从 Rake 任务运行时,我得到一个权限被拒绝的错误,就像这样

Errno::EACCES: Permission denied @ sys_fail2 - 

源文件夹称为uploads,目标文件夹为imported文件夹。按照权限和文件夹的用户和组

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 建议的那样,我尝试更改源文件夹和目标文件夹的所有者和组,实际上我设法执行了 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(负责将文件移动到上传文件夹)无法写入上传文件夹。没有其他配置在工作(不仅是上传文件夹组,也不是 777 到导入文件夹)。

最佳答案

您基本上回答了您自己的问题。这是一个权限问题,与尝试执行移动操作的操作系统用户有关。它适用于 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 .

关于ruby-on-rails - 在 Rake 权限被拒绝的情况下移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com