ログインした管理者がステージングデータベースをライブデータベースにプッシュする機能を必要とするサイトがあります。まず、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」です。私の最高の推測は、スクリプトが実行を終了するまでにかなりの遅延があるため、ビューはそれが終了するのを適切に待つ方法を知らないということです。私が持っていたもう一つの推測は、パスがどうにかして見えてしまうからです。
これは、ユーザーの認証がファイルに設定されている可能性がありますか? -oオプションを試すことができます。 rsyncで-vオプションを試して、警告が出ているかどうか確認しましたか? – Priyeshj
私はそれを試してみましょう...ビューからrsyncを呼び出す最良の方法に関するアイデア? – Sebastian
'origin_folder'と' target_folder'が本当に確実でないかぎり、このコードをプロダクションで使用しないでください。さもなければあなたはシェルインジェクションを受けやすいでしょう。 –