2016-07-14 39 views
0

我在其中的服務器從文件夾移動處理的文件到另一個端部的瑞克,使用FileUtils.mv,像這樣:移動文件拒絕

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

如果我運行此命令在Rails服務器內(我有一個操作是rake任務的副本,只是爲了簡化控制器內部的調試),一切都很順利(可能是因爲我使用rvmsudo以root權限運行服務器)。 當從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,並因此耙任務,改變兩者的所有者和組文件夾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/ 

,但以這種方式,阿帕奇(這是負責文件移動到文件夾上傳的)是不能夠寫入上傳的文件夾。沒有其他配置正在工作(不僅僅是上傳文件夾組,也不是777導入文件夾)。

回答

1

你基本上回答了你自己的問題。這是一個權限問題,涉及嘗試移動操作的操作系統用戶。它從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操作。

UPDATE

當特權用戶下運行rake,做從cron並避免將保存在某個地方,你可以使用NOPASSWD指令的密碼。

查看詳情this askubuntu answer

+0

感謝您的回覆。作爲特權用戶運行rake的解決方案不會是推薦的解決方案,因爲它是作爲cronjob運行的,所以我將被迫將我的sudo密碼以明文形式存儲在cron文件中。 我試過你建議的第二種解決方案,也將導入的文件夾的權限更改爲775,但仍然得到相同的權限拒絕錯誤...我將編輯我的問題,添加我正在使用的操作系統。 – sissy

+0

查看我的答案更新。 –