寻找部署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中的例子。