Flask and passenger setup?



寻找部署Flask应用程序的最佳实践建议。我的托管提供商有passenger可用。我有一个基本的结构:

~/home/me/dev.domain.com
└── public
└── cgi-bin
└── ...

主机公司告诉我,我需要public目录级别的passenger_wsgi.py

我的项目大致如下:

.
├── app
│   ├── __init__.py
│   ├── static
│   │   ├── css
│   │   ├── images
│   │   └── js
│   ├── templates
│   │   ├── layout.html
│   │   ├── main.html
│   │   └── other.html
│   └── views
│       ├── __init__.py
│       └── main.py
└── app.py

我的问题是:venv应该住在哪里?在public文件夹内或与public在同一级别

~/home/me/dev.domain.com
└── passenger_wsgi.py
└── venv
└── public
├── app
│   ├── __init__.py
│   ├── static
│   ├── templates
│   └── views
└── app.py

~/home/me/dev.domain.com
└── passenger_wsgi.py
└── public
├── venv
├── app
│   ├── __init__.py
│   ├── static
│   ├── templates
│   └── views
└── app.py

我有以下工作:

我的问题是关于使部署更容易的项目布局。我当前的解决方案是

$ tree -d
.
+-- passenger_wsgi.py
+-- public
¦   +-- static
¦   ¦   +-- LIB
¦   ¦   +-- css
¦   ¦   +-- images
¦   ¦   +-- js
¦   +-- templates
¦   +-- views
+-- requirements.txt
+-- venv
基本上,我将默认的Flaskapp文件夹重命名为public。我的passenger_wsgi.py脚本现在看起来像:
import os
import sys
INTERP = os.path.join(os.path.abspath('.'), 'venv/bin/python3')
if sys.executable != INTERP:
os.execl(INTERP, INTERP, *sys.argv)
from public import create_app
cwd = os.path.abspath('.')
sys.path.append(cwd)
sys.path.append(os.path.join(cwd, '/public'))  # You must add your project here
sys.path.insert(0, os.path.join(cwd, 'venv/bin'))
sys.path.insert(0, os.path.join(cwd, 'venv/lib/python3.9/site-packages/'))
application = create_app()

看起来passenger_wsgi.py文件的内容和操作依赖于主机平台。在我做其他事情之前,我必须确保我的venv网站在我的路径上。这看起来一点也不像我的提供商的FAQ中的例子。

最新更新