504 Gateway Time-out 服务器没有及时响应
504 Gateway Time-out The server didn't respond in time
我使用虚拟机 运行 我的 Flask 应用程序 'sqtf'。她使用 127.0.0.1:5000 在本地工作,但不使用我的 apache 服务器。我使用 python3.6、apache2.4 和 mod_wsgi。
这是我项目的简化结构:
/var/www/squashPy/src/squash_test_filter/
/sqtf
sqtf.wsgi
__init__.py
/static
/templates
/venv
在 apache 上配置我的 VirtualHost 'sqtf.com.conf' 然后我的 sqtf.wsgi(还配置我的 virtualenv 和 /etc/hosts)后,服务器响应 www.sqtf.com 但在我的登录中页面或任何其他,'www.sqtf.com/auth/login' 504 网关超时服务器端口 80。
在我的 error.log 中:
从守护进程'sqtf'读取响应时超时:/var/www/squashPy/src/squash_test_filter/sqtf/sqtf.wsgi
我在我的 DeamonProcess 中添加了一个 python-home。
增加超时不会改变任何东西。
我的sqtf.com.conf
<VirtualHost *:80>
ServerName www.sqtf.com
ServerAlias sqtf.com
ErrorLog /var/www/squashPy/sqtf.com/logs/error.log
CustomLog /var/www/squashPy/sqtf.com/logs/custom.log combined
WSGIDaemonProcess sqtf python-home='var/www/squashPy/src/squash_test_filter/venv'
WSGIProcessGroup sqtf
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /var/www/..../sqtf/sqtf.wsgi
Alias /static/ /var/wwww/..../sqtf/static
<Directory /var/www/..../static>
Require all granted
</Directory>
<VirtualHost>
我的sqtf.wsgi
activate_this='/var/www/..../venv/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
import sys
import logging
sys.path.insert(0, "/var/www/squashPy/src/squash_test_filter/")
from sqtf import app as application
我的一部分 /etc/hosts :
127.0.0.1 localhost
127.0.1.1 ubuntu
127.0.0.1 www.sqtf.com sqtf.com sqtf
# etc ...
我的 /sqtf/init.py
的一部分
import ...
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
api = Api(app)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'sqtf.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
db.init_app(app)
return app
我解决了这个问题,如果你使用烧瓶工厂,例如 create_app,你需要在你的 .wsgi 中改变这一行 from sqtf import app as application
:
from sqtf import create_app
application=create_app()
我使用虚拟机 运行 我的 Flask 应用程序 'sqtf'。她使用 127.0.0.1:5000 在本地工作,但不使用我的 apache 服务器。我使用 python3.6、apache2.4 和 mod_wsgi。 这是我项目的简化结构:
/var/www/squashPy/src/squash_test_filter/
/sqtf
sqtf.wsgi
__init__.py
/static
/templates
/venv
在 apache 上配置我的 VirtualHost 'sqtf.com.conf' 然后我的 sqtf.wsgi(还配置我的 virtualenv 和 /etc/hosts)后,服务器响应 www.sqtf.com 但在我的登录中页面或任何其他,'www.sqtf.com/auth/login' 504 网关超时服务器端口 80。
在我的 error.log 中:
从守护进程'sqtf'读取响应时超时:/var/www/squashPy/src/squash_test_filter/sqtf/sqtf.wsgi
我在我的 DeamonProcess 中添加了一个 python-home。 增加超时不会改变任何东西。
我的sqtf.com.conf
<VirtualHost *:80>
ServerName www.sqtf.com
ServerAlias sqtf.com
ErrorLog /var/www/squashPy/sqtf.com/logs/error.log
CustomLog /var/www/squashPy/sqtf.com/logs/custom.log combined
WSGIDaemonProcess sqtf python-home='var/www/squashPy/src/squash_test_filter/venv'
WSGIProcessGroup sqtf
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /var/www/..../sqtf/sqtf.wsgi
Alias /static/ /var/wwww/..../sqtf/static
<Directory /var/www/..../static>
Require all granted
</Directory>
<VirtualHost>
我的sqtf.wsgi
activate_this='/var/www/..../venv/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
import sys
import logging
sys.path.insert(0, "/var/www/squashPy/src/squash_test_filter/")
from sqtf import app as application
我的一部分 /etc/hosts :
127.0.0.1 localhost
127.0.1.1 ubuntu
127.0.0.1 www.sqtf.com sqtf.com sqtf
# etc ...
我的 /sqtf/init.py
的一部分 import ...
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
api = Api(app)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'sqtf.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
db.init_app(app)
return app
我解决了这个问题,如果你使用烧瓶工厂,例如 create_app,你需要在你的 .wsgi 中改变这一行 from sqtf import app as application
:
from sqtf import create_app
application=create_app()