2012-01-27 5 views
5

ログインした管理者がステージングデータベースをライブデータベースにプッシュする機能を必要とするサイトがあります。まず、SQLをダンプしてターゲットデータベースにプッシュすることです。これは正常に動作しますが、アップロードされた素材を含むフォルダをrsyncに移動すると、エラーが発生します。これは、コマンドラインまたはPythonシェルからではなく、ビュー内からスクリプトが呼び出されたときにのみ発生します。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

+0

私はそれを試してみましょう...ビューからrsyncを呼び出す最良の方法に関するアイデア? – Sebastian

+0

'origin_folder'と' target_folder'が本当に確実でないかぎり、このコードをプロダクションで使用しないでください。さもなければあなたはシェルインジェクションを受けやすいでしょう。 –

答えて

1

サーバーのアクセス許可を確認すると、コマンドラインを使用したときとは異なるユーザー/アクセス許可が設定され、そのコマンドを実行できなくなる可能性があります。

2

ビューを使用してコマンドを実行すると、 'django'ユーザーがコマンドを呼び出しているため、そのコマンドを実行する権限がない可能性があります。 rsync os.chown(path, uid, gid)を実行する前に、ディレクトリの所有者を変更して、どこにでもアクセスできるかどうかを調べることができます。

また、rsync -avzPを実行すると、デバッグに役立つ詳細情報を提供する追加の詳細、圧縮、および部分/進捗オプションが表示されます。

+0

あなたはどちらもそれを持っています。 – Sebastian

関連する問題