django 在 heroku 上部署单独的 web 和 api 端点
django deploying separate web & api endpoints on heroku
我有一个带有关联 API 和数据库的 Web 应用程序。
我想在 API 中使用相同的 Django 模型,但它由不同的进程分别提供服务,这样我就可以独立地扩展它。
我也不需要 API 来提供静态资产或任何其他视图。
复杂的是我定义的路由有 API 和 webapp 共享根域:
http://domain.com/normal/application/stuff
http://domain.com/api/different/stuff
另外我的 Django 应用程序依赖于彼此的模型和常量(所以两个不同的 settings.py
文件和不同的 INSTALLED_APPS
并不能完全解决它)。
我想一种方法是我可以在我的 Procfile 中定义不同的进程来启动 Django 应用程序,但是在其中一个进程中它可能有不同的环境变量?我不认为我可以使用 heroku:config
更改每个 Proc 的环境,我认为它实际上必须是 Procfile 中的一个指令。
有人对此有任何经验或见解吗?谢谢!
我认为您不需要不同的环境变量,只需一个单独的 WSGI 文件指向不同的 settings.py。这些设置文件可以从通用文件导入共享设置,然后为 INSTALLED_APPS 设置它们的特定值。然后Procfile可以在不同的进程中引用那些wsgi文件。
正如 Daniel 所说,您可以只使用两个具有共享基础的设置文件。如果您想提供 url 的子集,您还应该在 ROOT_URLCONF
设置中创建单独的 url 定义。
所以你的项目结构应该是这样的:
project/
project/
settings/
__init__.py
base.py
normal.py
api.py
urls/
__init__.py
base.py
normal.py
api.py
wsgi/
__init__.py
normal.py
api.py
settings/normal.py(api 的类比)会是这样的:
from .base import *
ROOT_URLCONF = 'project.urls.normal
我有一个带有关联 API 和数据库的 Web 应用程序。
我想在 API 中使用相同的 Django 模型,但它由不同的进程分别提供服务,这样我就可以独立地扩展它。
我也不需要 API 来提供静态资产或任何其他视图。
复杂的是我定义的路由有 API 和 webapp 共享根域:
http://domain.com/normal/application/stuff
http://domain.com/api/different/stuff
另外我的 Django 应用程序依赖于彼此的模型和常量(所以两个不同的 settings.py
文件和不同的 INSTALLED_APPS
并不能完全解决它)。
我想一种方法是我可以在我的 Procfile 中定义不同的进程来启动 Django 应用程序,但是在其中一个进程中它可能有不同的环境变量?我不认为我可以使用 heroku:config
更改每个 Proc 的环境,我认为它实际上必须是 Procfile 中的一个指令。
有人对此有任何经验或见解吗?谢谢!
我认为您不需要不同的环境变量,只需一个单独的 WSGI 文件指向不同的 settings.py。这些设置文件可以从通用文件导入共享设置,然后为 INSTALLED_APPS 设置它们的特定值。然后Procfile可以在不同的进程中引用那些wsgi文件。
正如 Daniel 所说,您可以只使用两个具有共享基础的设置文件。如果您想提供 url 的子集,您还应该在 ROOT_URLCONF
设置中创建单独的 url 定义。
所以你的项目结构应该是这样的:
project/
project/
settings/
__init__.py
base.py
normal.py
api.py
urls/
__init__.py
base.py
normal.py
api.py
wsgi/
__init__.py
normal.py
api.py
settings/normal.py(api 的类比)会是这样的:
from .base import *
ROOT_URLCONF = 'project.urls.normal