Gunicorn: рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмреВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдкреНрд░реИрд▓ 2012  ┬╖  36рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЙрдЪрд┐рдд рд╕реАрдзреА Django рд╕рд╛рдЗрдЯ рд╣реИред рдЬрдм рдореИрдВ ./manage.py рд░рдирд░рд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдареАрдХ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдмреВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред

tijs<strong i="6">@python</strong>:~/projects/hoogtij.net$ sudo ./runscript.sh 
2012-04-25 14:02:08 [12681] [INFO] Starting gunicorn 0.14.1
2012-04-25 14:02:08 [12681] [INFO] Listening at: http://127.0.0.1:8001 (12681)
2012-04-25 14:02:08 [12681] [INFO] Using worker: sync
2012-04-25 14:02:08 [12696] [INFO] Booting worker with pid: 12696
2012-04-25 14:02:08 [12697] [INFO] Booting worker with pid: 12697
2012-04-25 14:02:08 [12698] [INFO] Booting worker with pid: 12698
Traceback (most recent call last):
  File "/home/tijs/.virtualenvs/hoogtij/bin/gunicorn_django", line 8, in <module>
    load_entry_point('gunicorn==0.14.1', 'console_scripts', 'gunicorn_django')()
  File "/home/tijs/.virtualenvs/hoogtij/local/lib/python2.7/site-packages/gunicorn/app/djangoapp.py", line 129, in run
    DjangoApplication("%prog [OPTIONS] [SETTINGS_PATH]").run()
  File "/home/tijs/.virtualenvs/hoogtij/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 129, in run
    Arbiter(self).run()
  File "/home/tijs/.virtualenvs/hoogtij/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 184, in run
    self.halt(reason=inst.reason, exit_status=inst.exit_status)
  File "/home/tijs/.virtualenvs/hoogtij/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 279, in halt
    self.stop()
  File "/home/tijs/.virtualenvs/hoogtij/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 327, in stop
    self.reap_workers()
  File "/home/tijs/.virtualenvs/hoogtij/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 413, in reap_workers
    raise HaltServer(reason, self.WORKER_BOOT_ERROR)
gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХрд╣рд╛рдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рд╕рдорд╕реНрдпрд╛ рдЖрдорддреМрд░ рдкрд░ django рдореЗрдВ рд╣реА рдХреБрдЫ рд╣реЛрддреА рд╣реИред
рдЕрдкрдирд╛ рд╡реЗрдирд╡ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ рдФрд░ ./manage.py рд░рдирд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдВ

рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЧрд╛ред

рд╕рднреА 36 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЧрдирд┐рдХреЛрд░реНрди рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдмрд╛рд╣рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ?

рдЕрдВрджрд░ред рдЕрдм рддрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрдк рдореБрджреНрджрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдореИрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдЧрдирд┐рдХреЛрд░реНрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддреЗ рдХрд┐ рдЙрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдХреНрдпрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред

"--debug --log-level рдбреАрдмрдЧ" рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИред

рдпрд╣ рдбрд┐рдмрдЧ рд▓реЙрдЧ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рд╣реИ рдореБрдЭреЗ рдбрд░ рд╣реИ

:рдирд┐рд░рд╛рд╢:
рдореБрдЭреЗ рдЕрднреА рддрдХ рдпрдХреАрди рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред "рдмреВрдЯрд┐рдВрдЧ рд╡рд░реНрдХрд░" рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рдкрд░ "рд╡рд░реНрдХрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрд╡рд╛рдж" рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЕрднреА рдЖрдзреА рд░рд╛рдд рдпрд╣рд╛рдБ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдкрд░ рд╕реЛрдКрдБрдЧрд╛ рдФрд░ рд╢рд╛рдпрдж рдХреБрдЫ рд▓реЗрдХрд░ рдЖрдКрдБред

рдзрдиреНрдпрд╡рд╛рдж рдЖрджрдореА, рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕рдордЭреВрдВ рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ред рдореИрдВ рдЕрдм рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬрдм рддрдХ рдореИрдВ рдлрд┐рд░ рд╕реЗ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд╛рд░рддрд╛, рддрдм рддрдХ рд╕рд╛рдорд╛рди рдЪрд╛рд▓реВ рдХрд░рдирд╛ред рдкреБрд░рд╛рдирд╛ рд╕реНрдХреВрд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ :)

@benoitc рдиреЗ log.exception рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛?

рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдЬрдЧрд░ рдЪреАрдЬ рд╣реИ рдЕрдЧрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдбреАрдмрдЧ рдзреНрд╡рдирд┐ рд╡рд╣рд╛рдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЕрд╕рд▓реА рдЬреЛрдбрд╝ рдЯреНрд░реЗрд╕рдмреИрдХ рд╣реИ :)

рдЕрд╕рд▓ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рд▓реЙрдЧ рдлрд╛рдЗрд▓ (stderr рдФрд░ stdout) рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реВрдВ рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╕реЗ рдЧрдирд┐рдХреЛрд░реНрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рдХрд╛рд░реНрдпрднрд╛рд░ рд╕рдВрднрд╛рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЙрдЧ рдлрд╛рдЗрд▓реЗрдВ рд░реВрдЯ рдХреЗ рддрд╣рдд рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ рдХрд┐ рд▓реЙрдЧ рдлрд╛рдЗрд▓реЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ рди рдХрд┐ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рджреНрд╡рд╛рд░рд╛?

рдЖрдк рдЧрдирд┐рдХреЛрд░реНрди рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ?

рдореИрдВ рдЗрд╕реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдБ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдЧрдирд┐рдХреЛрд░реНрди рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

[рдХрд╛рд░реНрдпрдХреНрд░рдо: рд╕реНрд▓рд╛рдЗрд╕рд╡реЗрдм]
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ =/рдСрдкреНрдЯ/src/рд╕реНрд▓рд╛рдЗрд╕рдлрд╝реЛрди/рд╡реЗрдмрдПрдк/рд╡реЗрдмрдПрдк/
рдХрдорд╛рдВрдб = /opt/src/slicephone/webapp/scripts/gunicorn.sh
stdout_logfile = /opt/logs/supervisord.stdout.log
stderr_logfile = /opt/logs/supervisord.stderr.log

рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдирд┐рдХреЛрд░реНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдЧрдирд┐рдХреЛрд░реНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛/рд╕рдореВрд╣ рдХреЛ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрдкрд░реНрд╢ рдФрд░ рдЪреЛрджрддрд╛ рд╣реВрдВ):

!/рдмрд┐рди/рдмрд╛рд╢

рд╕реЗрдЯ-рдИ
DATASTORE_SOFTWARE="XXXXX"
ACCESS_LOGFILE=/opt/logs/gunicorn.slice.access.log
ERROR_LOGFILE=/opt/logs/gunicorn.slice.error.log
LOGFILE=/opt/logs/gunicorn.slice.log
LOGDIR=$(dirname $LOGFILE)
WEBAPPDIR=$(dirname $0)/../
NUM_WORKERS=3
DEBUG_FLAGS="--debug --log-level рдбреАрдмрдЧ"

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛/рд╕рдореВрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = www-рдбреЗрдЯрд╛
рдЧреНрд░реБрдк = www-рдбреЗрдЯрд╛
рд╕реАрдбреА $WEBAPPDIR/webapp
рдЯреЗрд╕реНрдЯ-рдбреА $LOGDIR || рдПрдордХреЗрдбреАрдЖрдИрдЖрд░-рдкреА $LOGDIR
рдЗрдХреЛ рд╡реЗрдмрдПрдкрдбрд┐рд░: $WEBAPPDIR
рдЧреВрдВрдЬ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: $USER"
рдЧреВрдВрдЬ "рд╕рдореВрд╣: $GROUP"

$ACCESS_LOGFILE $ERROR_LOGFILE $LOGFILE рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдВ
chown -R $USER:$GROUP $ACCESS_LOGFILE $ERROR_LOGFILE $LOGFILE

рдирд┐рд░реНрдпрд╛рдд DATASTORE_SOFTWARE=$DATASTORE_SOFTWARE; рдирд┐рд╖реНрдкрд╛рджрди/рдСрдкреНрдЯ/virtenvs/django_slice/bin/gunicorn_django $DEBUG_FLAGS -w $NUM_WORKERS --user=$USER --group=$GROUP --log-level=debug --log-file=$LOGFILE --access-logfile= $ACCESS_LOGFILE --error-logfile=$ERROR_LOGFILE

рдирд╡реАрдирддрдо рд╕рд┐рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ред рдкрд╛рдЗрдк рдлреНрд░реАрдЬ рдЗрд╕реЗ 0.14.1 рджрд┐рдЦрд╛рддрд╛ рд╣реИ (.2 рдирд╡реАрдирддрдо рд╣реИ рдирд╛?)

рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╣рд╛рдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХреВрдВ? рдзрдиреНрдпрд╡рд╛рджред

@panyam рдХреНрдпрд╛ рдЖрдкрдиреЗ 0.14.3 рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛?

@benoitc рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рджреЛрд╕реНрдд рдореИрдВрдиреЗ рдЗрд╕реЗ 0.14.3 рдкрд░ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреАред рдЬреИрд╕реЗ рд╣реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЧрдирд┐рдХреЛрд░реНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдореА рдмрдирд╛рдХрд░ 0.14.1 рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред

рдмрд╕ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдмрдВрджреВрдХрдзрд╛рд░реА рдореБрджреНрджрд╛ рд╣реИред @anyeguyue - рдЗрд╕реЗ

рдореБрдЭреЗ рдмрд╕ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ 'рдкрд╛рдпрдерди рдореИрдиреЗрдЬ.рдкреА рд╕рд┐рдВрдХрдбреАрдмреА' рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬрд┐рд╕рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рдЙрд╕ рд╕реЗрдЯрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЧрдирд┐рдХреЛрд░реНрди рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ (nginx рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж)ред

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рднреА рд╣рд▓ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗред Gunicorn_django рдлрд╝рд╛рдЗрд▓ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ "#!/opt/django/env/mysite/bin/python" рдереА, рдЬреЛ рдореЗрд░реЗ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡рд╛рдпрд░рдореЗрдВрдЯ рдкрд╛рдпрдерди рдкрде рдХрд╛ рдкрде рд╣реИред рдЗрд╕реЗ "#!/Usr/bin/env python" рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╣рд▓ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдХреБрдЫ PYTHONPATH рдЕрдВрддрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд╣рд▓реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рдерд╛ред

@anyeguyue рдореБрдЭреЗ рдЧрдирд┐рдХреЛрд░реНрди 0.14.5 рдФрд░ Django 1.4 рдкрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде: gunicorn_django -b 0.0.0.0:8000 рдиреЗ рдЪрд▓рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдЖрдкрдХрд╛ рдлрд┐рдХреНрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдХрд┐рд╕реА рдХреЛ рд╣рдореЗрд╢рд╛ /usr/bin/env рдкреВрдЫрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП python рд╣реИ! рдзрдиреНрдпрд╡рд╛рджред

@asimihsanя╝М рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реБрдИ

рдореЗрд░реЗ рдкрд╛рд╕ рднреА рдпрд╣ рдореБрджреНрджрд╛ рдерд╛ред рдмрд╛рд╣рд░ рдЖрдпрд╛ рдпрд╣ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдЧрд▓рдд рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рдереАред рдпрджрд┐ рдЖрдк рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ gunicorn_django --preload рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ - рдпрд╣ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рд╣реА рдЕрдкрд╡рд╛рдж рдереВрдХ рджреЗрдЧрд╛ред

рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рд╕рдорд╕реНрдпрд╛ рдЖрдорддреМрд░ рдкрд░ django рдореЗрдВ рд╣реА рдХреБрдЫ рд╣реЛрддреА рд╣реИред
рдЕрдкрдирд╛ рд╡реЗрдирд╡ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ рдФрд░ ./manage.py рд░рдирд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдВ

рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЧрд╛ред

: +1: @fergalmoran рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХреА (рдпрд╣ рдЬрдирд╣рд┐рдд рдпрд╛рдЪрд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА)

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ ... рдФрд░ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП

@pythdasch рдпрд╣рд╛рдБ рдХреБрдЫ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЧрдИ рд╣реИред рдпрджрд┐ рдЖрдк рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдЯрд┐рдХрдЯ рдЦреЛрд▓реЗрдВ, рдпрд╛ рдмрд╕ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ #gunicorn рдкрд░ @pythdasch рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рджрд┐рдпрд╛ рд╣реИред @pythdasch , рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ, рдмрд░реНрдХрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)

рдореЗрд░рд╛ wsgi рдореЗрд░реЗ manage.py рдХреЗ рд╕рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрде wsgi рдбрд╛рд▓рдирд╛ рдкрдбрд╝рд╛ рдбрдмреНрд▓реВрдПрд╕рдЬреАрдЖрдИ:рдЖрд╡реЗрджрди

(рдпрд╣ wsgi рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд░рд╛рд╕реНрддрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ wsgi: application рдХреЗ рдмрдЬрд╛рдп project.wsgi:application рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)

@tilgovi рд╣рд╛рдБ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореИрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдЖрд░рд╕реА рдЪреИрдирд▓ рдЧрдирд┐рдХреЛрд░реНрди рдореЗрдВ рдЧрдпрд╛ :)

рдореБрдЭреЗ рдХрд▓ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬрд┐рд╕рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди 0.18 рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╣реНрд╡рд╛рди рдерд╛:

gunicorn 'app:create_app()' --name X --workers 5 --user=apprunner --group=apprunner --bind='0.0.0.0:5000' --log-config=resource/config/di/logging.conf --timeout=360 --debug --log-level debug

рдпрд╣ рдореЗрд░реЗ рдлреНрд▓рд╛рд╕реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ ImportError рдХреЗ рдХрд╛рд░рдг рдерд╛ред рдпрд╣рд╛рдВ рд▓реЗрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмреВрдЯ рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЧрдирд┐рдХреЛрд░реНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЯреНрд░реЗрд╕рдмреИрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рд╢реБрд░реВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреНрд░реЗрд╕рдмреИрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЖрдИрдПрдордУ, рдЕрдЧрд▓реА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд, рдпрджрд┐ рдореВрд▓ рдЯреНрд░реЗрд╕рдмреИрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╕реАрдзреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрджреЗрд╢ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ Gunicorn рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ImportError рдЬреИрд╕реЗ рдЕрдкрд╡рд╛рдж рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

$ gunicorn a:app --error-logfile=- --access-logfile=-
[2014-12-10 17:13:31 +0000] [12176] [INFO] Starting gunicorn 19.2.0
[2014-12-10 17:13:31 +0000] [12176] [INFO] Listening at: http://127.0.0.1:8000 (12176)
[2014-12-10 17:13:31 +0000] [12176] [INFO] Using worker: sync
[2014-12-10 17:13:31 +0000] [12181] [INFO] Booting worker with pid: 12181
[2014-12-10 17:13:31 +0000] [12181] [ERROR] Exception in worker process:
Traceback (most recent call last):
  File "/home/berker/projects/gunicorn/gunicorn/arbiter.py", line 517, in spawn_worker
    worker.init_process()
  File "/home/berker/projects/gunicorn/gunicorn/workers/base.py", line 117, in init_process
    self.wsgi = self.app.wsgi()
  File "/home/berker/projects/gunicorn/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/berker/projects/gunicorn/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/home/berker/projects/gunicorn/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/home/berker/projects/gunicorn/gunicorn/util.py", line 355, in import_app
    __import__(module)
  File "/home/berker/projects/testdjango/a.py", line 1, in <module>
    from flask import Flask
ImportError: No module named flask

рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢:

$ gunicorn a:app --error-logfile=- --access-logfile=-
[2014-12-10 17:18:52 +0000] [12294] [INFO] Starting gunicorn 19.2.0
[2014-12-10 17:18:52 +0000] [12294] [ERROR] Connection in use: ('127.0.0.1', 8000)
[2014-12-10 17:18:52 +0000] [12294] [ERROR] Retrying in 1 second.
[2014-12-10 17:18:53 +0000] [12294] [ERROR] Connection in use: ('127.0.0.1', 8000)
[2014-12-10 17:18:53 +0000] [12294] [ERROR] Retrying in 1 second.
[2014-12-10 17:18:54 +0000] [12294] [ERROR] Connection in use: ('127.0.0.1', 8000)
[2014-12-10 17:18:54 +0000] [12294] [ERROR] Retrying in 1 second.

рдЬрдм рдореИрдВрдиреЗ рдРрдк рдХреЛ рдЗрд╕ рддрд░рд╣ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддреЛ рдореБрдЭреЗ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛:

gunicorn app:application -b localhost:3000

рд╕рдорд╕реНрдпрд╛ рдирд╛рдо рдХреА рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ app рднреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛ app.py ред рдЗрд╕рдиреЗ рдЕрдЬрдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд┐рдпрд╛ред

@brouberol рдореИрдВ рдЕрдм рднреА рдЗрд╕реА рдореБрджреНрджреЗ рдкрд░ рдЖрдпрд╛ рдерд╛ред рдЬрдм рдлреНрд▓рд╛рд╕реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВ, рддреЛ Gunicorn рдЯреНрд░реЗрд╕рдмреИрдХ рд▓реЙрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рд░реНрд╡рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ Gunicorn рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдмреВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рдмрд┐рд▓реНрдЯрд┐рди рд╕рд░реНрд╡рд░ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдЧрдирдХреЙрд░реНрди рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВ --preload рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ

рдореЗрд░реЗ рд▓рд┐рдП, Django runserver рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рдорд╕реНрдпрд╛ gunicorn.conf.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ Django settings рдЖрдпрд╛рдд рдХрд░ рд░рд╣реА рдереАред рдЙрд╕ рдЖрдпрд╛рдд рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

leonardbinet picture leonardbinet  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vaibhavpatil123 picture vaibhavpatil123  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lordmauve picture lordmauve  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alep picture alep  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

twosigmajab picture twosigmajab  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ