- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找不到关于如何在 virtualenv 中运行 Nginx 作为反向代理、gevent 作为 http 服务器和 django 的好教程。
我找到了类似的 tutorial ,但是它用于 uWSGI 而不是 gevent。任何有关如何使用 gevent 进行这项工作的建议都将不胜感激。
谢谢
最佳答案
对于像我这样从未尝试过 nginx、gunicorn 和 gevent 的人来说,这可能会很复杂。我正在使用 Debian Squeeze 并且更喜欢 virtualenv 中的 pip 而不是 deb 包,因为稳定版中的一些包已经过时,但当然它们只是稳定的。有时 debs 可以帮助管理(参见 gunicorn 解决方案)。我不要chroot ,但这很容易 - 我只是相信这对我来说没有必要。
首先,您必须创建一个名为 webd 的用户,以便更好地隔离。我假设 webd 组存在。你可以检查它是否存在:
root$ cat /etc/group | cut -d: -f1 | grep -E '^webd'
如果组存在,则打印 webd
。如果不是,请在以下命令中将 -g webd
替换为 -U
。首先阅读 useradd --help
。
root$ useradd --home-dir /var/web --create-home --shell /bin/bash -g webd webd
安装 pip和 virtualenv来自官方 repo 。
root$ aptitude install python-pip python-virtualenv
作为 virtualenv 助手,您可以使用 virtualenvwrapper , 但它的 deb 版本很旧,所以我更喜欢用 pip 代替:
root$ pip install virtualenvwrapper
将以下行添加到 /var/web/.bashrc
的末尾:
source /usr/local/bin/virtualenvwrapper.sh
让我们用 gevent 和 django 1.5c1 准备用于生产的 virtualenv。您可能需要从 debian repo 安装一些开发包来 pip 下面的一些 - 如果您有问题请告诉我。
root$ su - webd
webd$ mkvirtualenv --no-site-packages production
(production)webd$ pip install -U distribute
(production)webd$ pip install gunicorn
(production)webd$ pip install gevent
(production)webd$ pip install https://www.djangoproject.com/download/1.5c1/tarball/
(production)webd$ pip install django-gevent-deploy
(production)webd$ cd .virtualenvs/production/bin/
(production)webd$ ln -s django-admin.py django-admin
(production)webd$ exit
root$ su - webd
webd$ workon production
(production)webd$ python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information
>>> import django
>>> django.VERSION
(1, 5, 0, 'rc', 1)
另外获得 pytz 和 postgres 支持:
(production)webd$ pip install pytz
(production)webd$ pip install psycopg2
(production)webd$ pip install gevent-psycopg2
如果你想离开生产环境,请使用deactivate
。如果您想激活它,请使用 workon production
。让我们创建 django lifespace(我更喜欢单主 django 项目):
(production)webd$ django-admin startproject myproject
(production)webd$ mv myproject/manage.py ./
(production)webd$ chmod u+x manage.py
(production)webd$ mv myproject/myproject/* myproject/
(production)webd$ rm -rf myproject/myproject/
(production)webd$ vim manage.py
改成这样:
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
if not '/var/web' in sys.path:
sys.path.append('/var/web')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
您需要适本地自定义 myproject/settings.py
文件。
我想使用最新的 gunicorn 0.17.2,所以我通过 pip 在生产 virtualenv 中安装了它。但我也想通过 /etc/init.d/gunicorn
像其他守护进程一样管理 gunicorn 守护进程,所以让我们从 backports 仓库安装最新的可能但已过时的 0.14.5 版本。
正如上面提到的,您将需要一些 debs - 一些来自官方 repo,一些来自 squeeze-backports。如果您还没有使用反向移植,请将此行添加到您的 /etc/apt/sources.list
:
deb http://backports.debian.org/debian-backports squeeze-backports main
更新您的源并安装 gunicorn:
root$ aptitude update
root$ aptitude -t squeeze-backports install gunicorn
Gunicorn 支持 virtualenv 的基础知识,但没有标准方法可以从其他守护进程的启动-停止脚本中使用专用的 gunicorn。我决定在文件 /usr/sbin/gunicorn-debian
中硬编码此功能。找到 Config.start(self)
方法并将其第一行替换为:
def start(self):
gunicornpath = self['gunicornpath'] if 'gunicornpath' in self else '/usr/bin'
daemon = {
'wsgi': gunicornpath + '/gunicorn',
'django': gunicornpath + '/gunicorn_django',
'paster': gunicornpath + '/gunicorn_paster',
}[self['mode']]
让我们配置 gunicorn 服务器。创建 /etc/gunicorn.d/web.py
文件并放入(我还没有尝试过 django 模式):
CONFIG = {
'mode': 'wsgi',
'user': 'webd',
'group': 'webd',
'working_dir': '/var/web',
'python': '/var/web/.virtualenvs/production/bin/python',
'pythonpath': '/var/web/.virtualenvs/production/lib/python2.6',
'gunicornpath': '/var/web/.virtualenvs/production/bin',
'args': (
'--bind=127.0.0.1:9090',
'--workers=4',
'--worker-class=egg:gunicorn#gevent',
'--daemon',
'myproject.wsgi:application',
),
}
接下来安装来自官方 repo 的较新版本的 nginx(1.2.6-1~dotdeb.0 而不是 1.2.1-2.2~bpo60+1):
root$ aptitude install nginx
创建和编辑/etc/nginx/sites-available/myproject
:
server {
listen *:80;
server_name mydomain.com;
root /var/web/;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;
proxy_pass http://localhost:9090/;
}
error_page 500 502 503 504 /err50x.html;
}
请也创建/var/web/err50x.html
。请记住,在真实服务器中,您必须设置 static
url 和一些其他细节。在 /etc/nginx/nginx.conf
的第一行添加以下内容:
user webd webd
日志目录的 chmod:
root$ chown -R webd:webd /var/log/gunicorn/ && chmod g+s /var/log/gunicorn/
root$ chown -R webd:webd /var/log/nginx/ && chmod g+s /var/log/nginx/
应用更改并启动您的机器:
root$ cd /etc/nginx/sites-enabled/
root$ ln -s ../sites-available/myproject 001-myproject
root$ /etc/init.d/gunicorn restart
root$ /etc/init.d/nginx restart
将其用于 django 的项目 shell:
(production)webd$ ~/manage.py shell
要创建新应用,请使用:
(production)webd$ cd ~/myproject/
(production)webd$ ~/manage.py startapp myapp
你有什么问题吗?哪些事情可以做得更好?
关于django - 如何运行 nginx、gevent、virtualenv 和 django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356576/
好的,所以我想从批处理文件运行我的整个工作环境... 我想要实现什么...... 打开新的 powershell,打开我的 API 文件夹并从该文件夹运行 VS Code 编辑器(cd c:\xy;
我正在查看 Cocoa Controls 上的示例并下载了一些演示。我遇到的问题是一些例子,比如 BCTabBarController ,不会在我的设备上构建或启动。当我打开项目时,它看起来很正常,没
我刚刚开始学习 C 语言(擅长 Java 和 Python)。 当编写 C 程序(例如 hello world)时,我在 ubuntu cmd 行上使用 gcc hello.c -o hello 编译
我在 php 脚本从 cron 开始运行到超时后注意到了这个问题,但是当它从命令行手动运行时这不是问题。 (对于 CLI,PHP 默认的 max_execution_time 是 0) 所以我尝试运行
我可以使用命令行运行测试 > ./node_modules/.bin/wdio wdio.conf.js 但是如果我尝试从 IntelliJ 的运行/调试配置运行它,我会遇到各种不同的错误。 Fea
Error occurred during initialization of VM. Could not reserve enough space for object heap. Error: C
将 Anaconda 安装到 C:\ 后,我无法打开 jupyter 笔记本。无论是在带有 jupyter notebook 的 Anaconda Prompt 中还是在导航器中。我就是无法让它工作。
我遇到一个问题,如果我双击我的脚本 (.py),或者使用 IDLE 打开它,它将正确编译并运行。但是,如果我尝试在 Windows 命令行中运行脚本,请使用 C:\> "C:\Software_Dev
情况 我正在使用 mysql 数据库。查询从 phpmyadmin 和 postman 运行 但是当我从 android 发送请求时(它返回零行) 我已经记录了从 android 发送的电子邮件是正确
所以这个有点奇怪 - 为什么从 Java 运行 .exe 文件会给出不同的输出而不是直接运行 .exe。 当 java 在下面的行执行时,它会调用我构建的可与 3CX 电话系统配合使用的 .exe 文
这行代码 Environment.Is64BitProcess 当我的应用单独运行时评估为真。 但是当它在我的 Visual Studio 单元测试中运行时,相同的表达式的计算结果为 false。 我
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我写了一个使用 libpq 连接到 PostgreSQL 数据库的演示。 我尝试通过包含将 C 文件连接到 PostgreSQL #include 在我将路径添加到系统变量 I:\Program F
如何从 Jenkins 运行 Android 模拟器来运行我的测试?当我在 Execiute Windows bath 命令中写入时,运行模拟器的命令: emulator -avd Tester 然后
我已经配置好东西,这样我就可以使用 ssl 登录和访问在 nginx 上运行的 errbit 我的问题是我不知道如何设置我的 Rails 应用程序的 errbit.rb 以便我可以运行测试 nginx
我编写了 flutter 应用程序,我通过 xcode 打开了 ios 部分并且应用程序正在运行,但是当我通过 flutter build ios 通过 vscode 运行应用程序时,我得到了这个错误
我有一个简短的 python 脚本,它使用日志记录模块和 configparser 模块。我在Win7下使用PyCharm 2.7.1和Python 3.3。 当我使用 PyCharm 运行我的脚本时
我在这里遇到了一些难题。 我的开发箱是 64 位的,windows 7。我所有的项目都编译为“任何 CPU”。该项目引用了 64 位版本的第 3 方软件 当我运行不使用任何 Web 引用的单元测试时,
当我注意到以下问题时,我正在做一些 C++ 练习。给定的代码将不会在 Visual Studio 2013 或 Qt Creator 5.4.1 中运行/编译 报错: invalid types 'd
假设我有一个 easteregg.py 文件: from airflow import DAG from dateutil import parser from datetime import tim
我是一名优秀的程序员,十分优秀!