Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mod_wsgi从错误的金字塔应用程序目录加载python脚本_Python_Python 2.7_Apache2_Mod Wsgi_Pyramid - Fatal编程技术网

mod_wsgi从错误的金字塔应用程序目录加载python脚本

mod_wsgi从错误的金字塔应用程序目录加载python脚本,python,python-2.7,apache2,mod-wsgi,pyramid,Python,Python 2.7,Apache2,Mod Wsgi,Pyramid,我有两个应用程序,它们的代码库几乎相同(功能相同,只是品牌不同),我正试图使用mod_wsgi和apache进行虚拟托管 两个应用程序的虚拟主机设置(在两个单独的文件中)相同(当然路径除外) appB.wsgi的内容 import os os.environ['PYTHON_EGG_CACHE'] = '/home/ubuntu/appA_virtualenv/appA-server/python-eggs' from pyramid.paster import get_app, setup_

我有两个应用程序,它们的代码库几乎相同(功能相同,只是品牌不同),我正试图使用mod_wsgi和apache进行虚拟托管

两个应用程序的虚拟主机设置(在两个单独的文件中)相同(当然路径除外)

appB.wsgi的内容

import os
os.environ['PYTHON_EGG_CACHE'] = '/home/ubuntu/appA_virtualenv/appA-server/python-eggs'

from pyramid.paster import get_app, setup_logging
ini_path = '/home/ubuntu/appA_virtualenv/appA-server/appA/development.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')
import os
os.environ['PYTHON_EGG_CACHE'] = '/home/ubuntu/appB_virtualenv/server/python-eggs'

from pyramid.paster import get_app, setup_logging
ini_path = '/home/ubuntu/appB_virtualenv/server/appB/development.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')
我在apache中启用了这两个站点,并意识到在访问appA时,将加载appB目录中的python脚本。我通过在两个应用程序的
\uuuuu init\uuuuuuuuy.py
中添加
print
语句来确认这一点,并且即使在我尝试访问appA时,也会打印appB的文本

然后我通过
$sudo a2dispatite appB
禁用了appB。appB.com无法加载,但appA.com仍在加载appB的代码

我将以下内容添加到appB
\uuuu init\uuuu.py
(注意:非appA

输出为

/home/ubuntu/appA_virtualenv/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg
/home/ubuntu/appA_virtualenv/appA-server/appA
这超出了我的理解,因为输出正确地指向了appA的目录,但是
打印文件被添加到了appB的
\uuuu init\uuuuuuuuuuuuuuuuy.py
,它位于
/home/ubuntu/appB\u virtualenv/server/appB/appB/\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuy.py

另外,我已经禁用了appB,apache设置不再在任何地方引用appB的目录,那么为什么appA仍在加载appB的脚本

我做错了什么?我需要更改哪些设置才能让appA在其自己的目录中加载脚本?谢谢


格雷厄姆建议的额外检查

  • 守护程序模式:
    mod\u wsgi.process\u group='appA'

  • 主解释器:
    mod\u wsgi.application\u group=''

  • PATH\u翻译为:'/home/ubuntu/appA\u virtualenv/appA server/appA.wsgi/'
  • 服务器名称:“appA.com”
  • SCRIPT\u文件名:'/home/ubuntu/appA\u virtualenv/appA server/appA.wsgi'
  • mod\u wsgi.application\u组:'
  • mod\u wsgi.process\u组:“appA”
  • mod_wsgi.version:(3,4)

乍一看,什么都不是问题

使用:

确认它们各自在哪个进程和应用程序组中执行

使用:

查看为每个in请求设置的服务器名称

用结果编辑您的问题


更新1

在Apache配置中有两个VirtualHost的情况下,请求总是在第一个VirtualHost处结束而从未到达第二个VirtualHost的原因之一是没有为VirtualHost侦听的端口指定NameVirtualHost指令。通常在Linux上,这对于端口80来说不是问题,因为默认情况下它是打开的

发生这种情况的另一个原因是URL中使用的主机名实际上与所需VirtualHost中的ServerName或ServerAlias都不匹配。当这种情况发生时,Apache将回退,将URL定向到读取Apache配置文件时找到的第一个VirtualHost。要捕获何时发生这种情况,通常最好声明一个默认的VirtualHost,它首先被读取,并且拒绝所有访问。至少这样,请求不会在错误的虚拟主机上结束,并且会被阻止

有关此问题的详细信息,请返回到first read VirtualHost,请参阅中的讨论:


尝试定义默认的VirtualHost,看看它是否会退回到第一个VirtualHost。然后您可以了解Apache配置的问题是什么导致了这种情况的发生。

我已将结果添加到问题的末尾。非常感谢你的帮助
import os
os.environ['PYTHON_EGG_CACHE'] = '/home/ubuntu/appB_virtualenv/server/python-eggs'

from pyramid.paster import get_app, setup_logging
ini_path = '/home/ubuntu/appB_virtualenv/server/appB/development.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')
print sys.path[0]
print os.getcwd()
/home/ubuntu/appA_virtualenv/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg
/home/ubuntu/appA_virtualenv/appA-server/appA