非常に奇妙な問題が発生しています。ウェブサイトを作成しましたが、バックエンドに問題があります。 Ubuntu 18.04サーバーで実行されています。バックエンドは、PythonおよびFlask(マイクロWebフレームワーク)で記述されています。NginxとGunicornを設定しました。Flaskの組み込み開発サーバーで。
このガイド を使用して、NginxとGunicornを正しく設定しました。これは問題ではありません。私のウェブサイトはFFmpegとLAMEなどのさまざまなエンコーダーを使用するオーディオコンバーターです。そのため、ターミナルでコマンドを実行する必要があります。例として、Python=が実行しようとする場合:
os.system('wine ~/.wine/drive_c/ffmpeg.exe -i "1.wav" -ac 2 -vn -f wav - | lame -b 320 - "12345".mp3')
ログに次のエラーが表示されます。
gunicorn[2311]: sh: 1: lame: not found
gunicorn[2311]: sh: 1: wine: not found
次のコマンドを使用して、os.systemの代わりにサブプロセスを使用してみました。
subprocess.run('wine ~/.wine/drive_c/ffmpeg.exe -i "1.wav" -ac 2 -vn -f wav - | lame -b 320 - "12345".mp3', Shell=True)
しかし、同じエラーが発生します。
事は、ラメとワインはうまくアクセスすることができるということです。そして、私のポイントを証明するために、ターミナルで直接同じコマンドを実行すると、次のようになります。
wine ~/.wine/drive_c/ffmpeg.exe -i "1.wav" -ac 2 -vn -f wav - | lame -b 320 - "12345".mp3
エラーは発生せず、1.wavファイルは正常にMP3に変換されます。
Pythonがこれらのコマンドを実行しようとすると、なぜこれらのエラーが発生するのですか?
**編集:私は考えていましたが、おそらくこれが問題です:Gunicornは仮想環境でセットアップされました このチュートリアル 。 LAMEとWineが仮想環境にインストールされていない可能性がありますか?たぶんそれが、Python/FlaskアプリをGunicornで実行するとき、それが何であるかわからないのはなぜですか?これが事実かどうかを確認する方法はありますか?
どうなるかと思ったら、仮想環境にGunicornがインストールされていることが原因でした。 Gunicornをアンインストールしましたが、今回はGunicornを再インストールする前に、仮想環境をセットアップするガイドの手順をスキップしました。また、myproject.serviceファイルを次のように変更しました。
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
Environment="PATH=/home/ubuntu/myproject/myprojectenv/bin"
ExecStart=/home/ubuntu/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app
これに:
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
ExecStart=/home/ubuntu/myproject/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app
今、私はGoogle DomainsがサーバーのIPを私のドメインにリンクするのを待つ必要があります。これはfreeaudioconverter.netです。