uWSGI不会在混合Python环境中运行,以便与nginx正确操作并运行Django应用程序

2024-02-20

环境:Ubuntu 16.04(系统 Python 为 2.7.12)在 Windows 10 主机上的 Vagrant/Virtualbox 中运行

Python 设置:通过在没有激活 virtualenv 的情况下执行 python -V 来验证系统 python。 Python 3.5也已安装,我已经完成了pipenv --three为此项目创建 virtualenv。在激活的 virtualenv 中执行 python -V (pipenv shell激活)显示Python 3.5.2。

附加背景:我正在开发 Wagtail 2 应用程序。 Wagtail 2 需要 Django 2,当然,还需要 Python 3。我在这台机器上还有其他 Django 应用程序,这些应用程序是在 Django 1.11/Python 2.7 中开发的,并由 Apache 提供服务。我们将转向 Django 2/Python 3 进行开发,并转向 nginx/uWSGI 来为应用程序提供服务。

我已经完成了很多教程/很多迭代。所有 Vagrant 端口映射都设置得很好,nginx 提供媒体/静态文件并将请求上游传递到 unix 套接字上的 Django 应用程序,但这会给出 502 Gateway not found 错误,因为 uWSGI 将无法正确运行。因此,现在我只是从命令行运行以下命令来尝试让 uWSGI 运行:uwsgi --ini /etc/uwsgi/sites/my_site.com.ini。该文件包含:

[uwsgi]

uid = www-data
gid = www-data

plugin = python35

# Django-related settings
# the base directory (full path)
chdir=/var/sites/my_site
# Django's wsgi file
wsgi-file = my_site.wsgi
# the virtualenv (full path)
virtualenv=/root/.local/share/virtualenvs/my_site-gmmiTMID

# process-related settings
# master
master = True
# maximum number of worker processes
processes = 10

# the socket (use the full path to be safe)
socket = /tmp/my_site.sock

# clear environment on exit
vacuum = True

我尝试通过以下方式安装uWSGI:

  • 全系统范围内pip install uwsgipip3 install uwsgi
  • using apt-get install uwsgi uwsgi-plugin-python3

我通过卸载任何以前的 uwsgi 安装来确保一次仅安装一个。后一种安装方法将 uwsgi-core 放置在 usr/bin 中,并在 usr/bin 中放置 uwsgi、uwsgi_python3 和 uwsgi_python35 的快捷方式。

在 .ini 文件中我也尝试过plugin = python3。我也从命令行尝试过:

  • uwsgi_python3 --ini /etc/uwsgi/sites/my_site.com.ini
  • uwsgi_python35 --ini /etc/uwsgi/sites/my_site.com.ini

我试过执行uwsgi ... .ini来自激活的虚拟环境和停用 virtualenv 的命令。三个命令行中的每一个uwsgi ... .ini处决(uwsgi ..., uwsgi_python3 ... and uwsgi_python35 ...)确实会导致 .ini 文件被执行,但每次我都会收到以下错误(以下语句的最后两行):

[uwsgi] implicit plugin requested python35
[uWSGI] getting INI configuration from /etc/uwsgi/sites/my_site.com.ini
*** Starting uWSGI 2.0.12-debian (64bit) on [Wed Mar  7 03:54:44 2018] ***
compiled with version: 5.4.0 20160609 on 31 August 2017 21:02:04
os: Linux-4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018
nodename: vagrant-ubuntu-trusty-64
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 2
current working directory: /vagrant/my_site
detected binary path: /usr/bin/uwsgi-core
setgid() to 33
setuid() to 33
chdir() to /var/sites/my_site
your processes number limit is 7743
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /tmp/my_site.sock fd 3
Python version: 3.5.2 (default, Nov 23 2017, 16:37:01)  [GCC 5.4.0 20160609]
Set PythonHome to /root/.local/share/virtualenvs/my_site-gmmiTMID
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

如果我进入激活的 virtualenv 中的 Python 命令行并执行import encodings,它导入得很好(没有消息 - 只是返回到命令行)。对该特定错误的搜索没有发现任何有用的结果。知道为什么会出现导入错误:没有名为“编码”的模块吗?

更新 - 问题仍然出现

我正在使用 Pipenv,它将各个 virtualenv 存储在/home/username/.local/share/virtualenvs文件夹。虽然我能够通过以流浪用户身份执行uWSGI配置文件来从命令行启动uWSGI(请参阅下面的评论),但我仍然无法启动服务/home/vagrant/.local/share/virtualenvs/my_venv在uWSGI配置文件中。我尝试将 vagrant 用户添加到 www-data 组,并将 www-data 用户添加到 vagrant 组。我还在整个路径(包括单个 venv)上设置了对 world 的读取和执行权限,但 uWSGI 服务仍然无法启动。

一个黑客的解决方法

我终于通过将 venv 复制到来启动 uWSGI 服务/opt/virtualenvs/my_venv。然后我就可以启动服务了sudo service uwsgi start。整个路径的所有权是 root:root。

仍在寻找解决方案...

这个解决方案不是最佳的,因为我现在从 virtualenv 执行,当更新默认 virtualenv 时,必须更新该 virtualenv,因为这个位置不是 pipelinev 的默认位置,所以我仍在寻找答案。也许是Ubuntu权限错误,但我就是找不到问题所在。


可能是你的虚拟环境的问题。尝试以下操作

rm -rf /root/.local/share/virtualenvs/my_site-gmmiTMID
virtualenv -p python3 /root/.local/share/virtualenvs/my_site-gmmiTMID
source /root/.local/share/virtualenvs/my_site-gmmiTMID/bin/activate
pip install -r requirements.txt

并在 uwsgi conf 中尝试更改

virtualenv=/root/.local/share/virtualenvs/my_site-gmmiTMID

to

home=/root/.local/share/virtualenvs/my_site-gmmiTMID

参考:http://uwsgi-docs.readthedocs.io/en/latest/Options.html#virtualenv http://uwsgi-docs.readthedocs.io/en/latest/Options.html#virtualenv

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uWSGI不会在混合Python环境中运行,以便与nginx正确操作并运行Django应用程序 的相关文章

  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • Django Rest Framework:字段名称“likes”对于模型“userPost”配置不正确无效

    在我的 Django Rest Framework api 中 我尝试向我的模型 UserPosts 添加一个属性 该属性返回所述帖子的所有喜欢 尽管我尽了最大努力 但我仍然遇到这个错误 下面是我的帖子模型 class UserPosts
  • 更改 `base_compiledir` 以将编译后的文件保存在另一个目录中

    theano base compiledir指编译后的文件存放的目录 有没有办法可以永久设置theano base compiledir到不同的位置 也许通过修改一些内部 Theano 文件的内容 http deeplearning net
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • Python urllib.request.urlopen:AttributeError:'bytes'对象没有属性'data'

    我正在使用 Python 3 并尝试连接到dstk 我收到错误urllib包裹 我对SO进行了很多研究 但找不到与这个问题类似的东西 api url self api base street2coordinates api body jso
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 如何在 python 中没有 csv.reader 迭代器的情况下解析单行 csv 字符串?

    我有一个 CSV 文件 需要重新排列和重新编码 我想跑 line line decode windows 1250 encode utf 8 在由 CSV 读取器解析和分割之前的每一行 或者我想自己迭代行 运行重新编码 并仅使用单行解析表单
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐