2012-01-27 47 views
5

我有一個站點需要登錄管理員才能將臨時數據庫推送到活動數據庫。它所做的第一件事是轉儲SQL並推送到目標數據庫。這工作正常,但是當我去rsync包含上傳的材料的文件夾時,出現錯誤。這隻會在腳本從視圖中調用時發生,而不是從命令行或python shell中調用。這裏是功能:如何從Django視圖rsync到本地文件夾

def copy_media(self, origin_folder, target_folder): 
    command_string = "rsync -a %s %s" % (origin_folder, target_folder) 
    return_code = subprocess.call(command_string, shell=True) 
    return return_code 

當它的錯誤返回代碼是「12」。我最好的猜測是,由於在腳本執行完成之前有相當長的延遲,視圖不知道如何正確等待它結束。我的另一個猜想是,路徑以某種方式在視圖內被搞砸了。

+0

它可能是由於用戶身份驗證設置文件?你可以嘗試-o選項。您是否嘗試使用rsync上的-v選項來查看是否發出警告? – Priyeshj 2012-01-27 21:22:01

+0

我會嘗試...從視圖調用rsync的最佳方式任何想法? – Sebastian 2012-01-27 22:23:49

+0

除非您確定'origin_folder'和'target_folder',否則您不會在生產中使用此代碼,否則您很容易發生shell注入。 – 2015-07-08 21:54:30

回答

1

檢查您的服務器的權限,它可能與您使用命令行時不同的用戶/權限,從而無法執行該命令。

2

當您通過視圖運行命令時,'django'用戶正在調用該命令,可能沒有執行權限。在運行rsync os.chown(path, uid, gid)之前,您可以嘗試更改目錄的所有者,然後查看是否能讓您獲得任何地方。

另外,如果您運行rsync -avzP,您將獲得額外的詳細信息,壓縮和部分/進度選項,這些選項可能會提供更多信息以幫助您進行調試。

+0

你們都知道了。 – Sebastian 2012-02-01 00:32:00

相關問題