6

Ubuntu12.04システムでSupervisorからGunicornを実行しようとしています。GunicornはFlaskアプリ(Flaskの組み込みサーバーでテストされた単純なREST Webサービス)を実行します。GITリポジトリをクローン化してGunicornをインストールしましたが、インストール時にGunicornサーバーが実行されるため、「apt-getinstall」を回避しようとしています。実行したくないので、スーパーバイザーのみが実行します。

それで、それをインストールした後、私が試してみると:

cd /usr/local/bin
gunicorn my_app:app -c /path/to/gu_config_file

Gunicornは動作します。それから私はそれを殺します。'.py'拡張子が付いていると機能しないため、拡張子のない設定ファイルに注意してください。したがって、Supervisorの構成ファイルを次のように編集します。

[program:gunicorn]
command=/usr/local/bin/gunicorn my_app:app -c /path/to/.gu_setup
directory=/usr/local/bin/
autostart=true
autorestart=true
redirect_stderr=True

そして、スーパーバイザーの変更を更新します。

supervisorctl reread
# gunicorn: changed
supervisorctl update
# gunicorn: stopped
# gunicorn: updated process group

ファイルの変更を検出し、Gunicornプログラムで機能します。わかりました、しかしそれから私はそれを始めようとします:

supervisorctl start gunicorn

迷惑になる:

gunicorn: ERROR (abnormal termination)

スーパーバイザーのログの確認:

2013-03-08 13:07:22,378 INFO spawned: 'gunicorn' with pid 3355
2013-03-08 13:07:22,916 INFO exited: gunicorn (exit status 3; not expected)
2013-03-08 13:07:23,918 INFO spawned: 'gunicorn' with pid 3361
2013-03-08 13:07:24,492 INFO exited: gunicorn (exit status 3; not expected)
2013-03-08 13:07:26,496 INFO spawned: 'gunicorn' with pid 3367
2013-03-08 13:07:27,078 INFO exited: gunicorn (exit status 3; not expected)
2013-03-08 13:07:30,085 INFO spawned: 'gunicorn' with pid 3373
2013-03-08 13:07:30,628 INFO exited: gunicorn (exit status 3; not expected)
2013-03-08 13:07:31,630 INFO gave up: gunicorn entered FATAL state, too many start retries too quickly

今何をしたらいいのかわからない…手伝ってくれませんか?ありがとう!

編集:申し訳ありませんが、PYTHONPATH変数を次のようにエクスポートしたと言うのを忘れました:

export PYTHONPATH=/usr/local/bin:/usr/local/lib/project

'my_app'は/usr/ local/binにあります。他のモジュールにはlibパスが必要です。次のような環境変数を示すために、スーパーバイザー構成ファイルも編集しました。

environment=PYTHONPATH=/usr/local/bin:/usr/local/lib/project/

しかし、動作しませんでした。

編集2:@robertklepが彼のコメントで示唆しているように、これはログの出力です:

Traceback (most recent call last):
  File "/tmp/gunicorn/gunicorn/arbiter.py", line 485, in spawn_worker
    worker.init_process()
  File "/tmp/gunicorn/gunicorn/workers/base.py", line 100, in init_process
    self.wsgi = self.app.wsgi()
  File "/tmp/gunicorn/gunicorn/app/base.py", line 103, in wsgi
    self.callable = self.load()
  File "/tmp/gunicorn/gunicorn/app/wsgiapp.py", line 25, in load
    return util.import_app(self.app_uri)
  File "/tmp/gunicorn/gunicorn/util.py", line 369, in import_app
    __import__(module)
  File "/usr/local/bin/my_app.py", line 4, in <module>
    import const
ImportError: No module named const
2013-03-08 13:29:35 [3670] [INFO] Worker exiting (pid: 3670)
2013-03-08 13:29:36 [3665] [INFO] Shutting down: Master
2013-03-08 13:29:36 [3665] [INFO] Reason: Worker failed to boot.

'const'モジュールは/usr/ local / lib/projectにあります...

4

2 に答える 2

9

スーパーバイザー構成ファイルで環境を設定しているのがわかりません。

[program:gunicorn]
environment=PYTHONPATH=/usr/local/bin:/usr/local/lib/project
command=/usr/local/bin/gunicorn my_app:app -c /path/to/.gu_setup
...

それでも問題が解決しない場合は、gunicornをデバッグモードで起動してみてください。

command=/usr/local/bin/gunicorn --debug --log-level debug my_app:app -c /path/to/.gu_setup

または、パスを直接gunicornに渡します。

command=/usr/local/bin/gunicorn --pythonpath /usr/local/bin,/usr/local/lib/project my_app:app -c /path/to/.gu_setup

編集: gunicorn--pythonpathは壊れています、あなたは1つのディレクトリしか渡すことができません:

command=/usr/local/bin/gunicorn --pythonpath /usr/local/lib/project my_app:app -c /path/to/.gu_setup
于 2013-03-08T12:24:40.303 に答える
4

--pythonpathを渡す必要はありません。virtuanenvを使用する場合は、gunicornがどこにあるかを追加します。例:

command=/home/virtualenv/bin/gunicorn application:app -c /home/virtualenv/deploy/gunicorn.conf.py

そしてディレクトリはFlaskコードがであるときです、例:

directory=/home/virtualenv/myapp

ユーザーがrootであることを忘れないでください!

user=root
于 2013-09-20T12:23:16.803 に答える