【问题标题】:Deploying Django with Virtualenv, Circus and Chaussette使用 Virtualenv、Circus 和 Chaussette 部署 Django
【发布时间】:2014-10-26 05:46:37
【问题描述】:

我正在尝试在带有 CentOS 7 的虚拟主机中使用 Virtualenv、Circus 和 Chaussette 运行 Django,但是当我运行 circusd circus.ini 时我不断收到此错误:

(djenv)[root@localhost django]# circusd circus.ini
2014-09-01 22:06:38 circus[2406] [INFO] Starting master on pid 2406
2014-09-01 22:06:38 circus[2406] [INFO] sockets started
2014-09-01 22:06:38 circus[2406] [WARNING] error in 'settings': [Errno 2] No such file or directory: '~/.virtualenv/djenv/bin/chaussette'
2014-09-01 22:06:38 circus[2406] [WARNING] error in 'settings': [Errno 2] No such file or directory: '~/.virtualenv/djenv/bin/chaussette'
2014-09-01 22:06:38 circus[2406] [WARNING] error in 'settings': [Errno 2] No such file or directory: '~/.virtualenv/djenv/bin/chaussette'
2014-09-01 22:06:38 circus[2406] [WARNING] error in 'settings': [Errno 2] No such file or directory: '~/.virtualenv/djenv/bin/chaussette'
2014-09-01 22:06:38 circus[2406] [WARNING] error in 'settings': [Errno 2] No such file or directory: '~/.virtualenv/djenv/bin/chaussette'
2014-09-01 22:06:38 circus[2406] [INFO] settings stopped
2014-09-01 22:06:38 circus[2406] [INFO] Arbiter now waiting for commands
2014-09-01 22:06:38 circus[2406] [INFO] circusd-stats started
2014-09-01 22:06:38 circus[2415] [INFO] Starting the stats streamer

# Here i close circusd with ctrl+c

2014-09-01 22:19:40 circus[2406] [INFO] Got signal SIG_INT
2014-09-01 22:19:40 circus[2406] [INFO] Arbiter exiting
2014-09-01 22:19:41 circus[2406] [INFO] circusd-stats stopped
Exception ignored in: <module 'threading' from '/usr/local/lib/python3.4/threading.py'>
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/threading.py", line 1294, in _shutdown
    t.join()
  File "/usr/local/lib/python3.4/threading.py", line 1057, in join
    raise RuntimeError("cannot join current thread")
RuntimeError: cannot join current thread

我的 django 项目的路径是 /opt/webapps/django/。这是该路径的结构:

(仅供参考:设置是我给我的 django 项目起的名字)

/django/
/django/manage.py
/django/circus.ini
/django/settings/
/django/settings/urls.py
/django/settings/wsgi.py
/django/settings/settings.py

我的 virtualenv 的路径是:~/.virtualenv/djenv/。这是该路径的结构(bin):

/djenv/
/djenv/bin/
/djenv/bin/circusd
/djenv/bin/chaussette
/djenv/bin/circushttpd
/djenv/bin/python3.4
/djenv/bin/pip

我的circus.ini的内容是:

[circus]
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[watcher:settings]
cmd = ~/.virtualenv/djenv/bin/chaussette django:/opt/webapps/django --fd $(circus.sockets.settings)$ --django-settings settings.settings
use_sockets = True
numprocesses = 3

[socket:settings]
host = 0.0.0.0
port = 8080

【问题讨论】:

  • 使用环境的完整路径,而不是 ~
  • 已经试过了,但我一直收到同样的错误。
  • 毕竟我实际上需要更改 ~ 以获取完整路径 (/root/)。谢谢

标签: python django virtualenv circusd centos7


【解决方案1】:

所以我终于找到了解决方案。这就是我所做的。

首先我将我的 circus.ini 更改为:

[circus]
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[watcher:settings]
cmd = /root/.virtualenvs/djenv/bin/chaussette settings.wsgi.application
args = --fd $(circus.sockets.settings)
use_sockets = True
numprocesses = 3
copy_env = True
virtualenv = /root/.virtualenvs/djenv/

[socket:settings]
host = 0.0.0.0
port = 8080

因为我在 python 3.4.1 中运行这个马戏团,所以我遇到了另一个错误:

OSError: [Errno 9] Bad file descriptor

寻找这个问题的解决方案我找到了这个修复https://github.com/mozilla-services/circus/pull/800/files

希望这对其他人有所帮助。

【讨论】:

  • 如果您使用 Python 3.5.1 运行此代码,预计会收到此错误 TypeError: get() got an unexpected keyword argument 'raw'。解决方案已在此处发布:github.com/circus-tent/circus/commit/… 只需按照 /path/to/virtualenv/lib/python3.5/site-packages/circus/config.py 中的建议添加 **kwargs
  • 对于尝试在生产中使用马戏团的人,您可以查看此帖子 (aameer.github.io/circus-as-an-alternative-to-supervisor),这可能会有所帮助。谢谢
【解决方案2】:

此回复为时已晚,但可能对其他人有用。现在使用 python3.4 和 django1.9

这是我的 /etc/circus/circusd.ini

[circus]
check_delay = 5
include_dir = /etc/circus/conf.d
logoutput = /var/log/circus/system.log
statsd = True

[plugin:flapping]
use = circus.plugins.flapping.Flapping

还有我的项目 /etc/circus/conf.d/project.ini

[project_name]
cmd = chaussette project_name.wsgi.application --backend waitress --fd $(circus.sockets.project_name)
use_sockets = True
virtualenv = /path/to/env  # if you are using virtualenv
working_dir = /path/to/project
copy_env = True

stdout_stream.class = FileStream
stdout_stream.filename = /path/to/logs/stdout.log
stdout_stream.refresh_time = 0.3

stderr_stream.class = FileStream
stderr_stream.filename = /path/to/logs/error.log
stderr_stream.refresh_time = 0.3

[project_name]
PYTHONPATH  = /path/to/project

[socket:project_name]
host = localhost
port = 8000

注意 /path/to/logs/ 和 /var/log/circus/system.log 的权限。目录应该存在。

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 2011-01-25
    • 2011-03-28
    • 2011-05-04
    • 2011-01-15
    • 2018-01-22
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多