运行 Oracle 应用程序容器上的 Django
Run Django on Oracle Application Container
我有一个现有的 django 项目,我正试图将其部署到 Oracle 的云服务,Application Container。
我关注了Oracle's guide to do this however there are some details missing from this guide. Specifically the guide references an app.py file which seems to come from this guide。但是我看不到如何在 django 项目中使用它。
我已经尝试将对 app.py 的调用替换为使用 django 的 manage.py 或 wsgi.py 文件,但 Oracle 服务器仍然无法启动。 Oracle 提供的服务器日志也没有帮助,只告诉我正在安装 python 包。
ACCS[web.1]: Content of APP_HOME [ /u01/app/ ] dir
ACCS[web.1]: total 96
ACCS[web.1]: -rw-r----- 1 apaas apaas 28423 May 17 10:51 readme.html
ACCS[web.1]: -rw-r----- 1 apaas apaas 40960 May 17 10:51 db.sqlite3
ACCS[web.1]: -rw-r----- 1 apaas apaas 355 Sep 10 13:26 manage.py
ACCS[web.1]: -rw-r----- 1 apaas apaas 254 Sep 10 13:28 DjangoProject.pyproj.user
ACCS[web.1]: -rw-r----- 1 apaas apaas 6990 Sep 10 13:28 DjangoProject.pyproj
ACCS[web.1]: -rw-r----- 1 apaas apaas 186 Sep 12 11:24 manifest.json
ACCS[web.1]: drwxr-x--- 1 apaas apaas 10 Sep 13 03:42 obj
ACCS[web.1]: drwxr-x--- 1 apaas apaas 160 Sep 13 03:42 app
ACCS[web.1]: drwxr-x--- 1 apaas apaas 94 Sep 13 03:42 DjangoProject
ACCS[web.1]: drwxr-xr-x 1 apaas apaas 286 Sep 13 03:42 .
ACCS[web.1]: drwxr-xr-x 1 apaas apaas 46 Sep 13 03:42 ..
ACCS[web.1]: -rw-r----- 1 apaas apaas 290 Sep 13 2018 start.sh
ACCS[web.1]: -rw-r----- 1 apaas apaas 51 Sep 13 2018 requirements.txt
ACCS[web.1]: Application should listen on 0.0.0.0:$PORT [enabling app to listen on all interfaces on $PORT env variable]
ACCS[web.1]: Starting application with launch command [ sh ./start.sh ]
APP[web.1]: Collecting Django==1.11.15 (from -r ./requirements.txt (line 1))
APP[web.1]: Downloading https://files.pythonhosted.org/packages/f8/1c/31112c778b7a56ce18e3fff5e8915719fbe1cd3476c1eef557dddacfac8b/Django-1.11.15-py2.py3-none-any.whl (6.9MB)
APP[web.1]: Collecting pytz==2018.5 (from -r ./requirements.txt (line 2))
APP[web.1]: Downloading https://files.pythonhosted.org/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB)
APP[web.1]: Collecting setuptools==39.0.1 (from -r ./requirements.txt (line 3))
APP[web.1]: Downloading https://files.pythonhosted.org/packages/20/d7/04a0b689d3035143e2ff288f4b9ee4bf6ed80585cc121c90bfd85a1a8c2e/setuptools-39.0.1-py2.py3-none-any.whl (569kB)
APP[web.1]: Installing collected packages: pytz, Django, setuptools
APP[web.1]: Successfully installed Django-1.11.15 pytz-2018.5 setuptools-39.0.1
APP[web.1]: You are using pip version 9.0.1, however version 18.0 is available.
APP[web.1]: You should consider upgrading via the 'pip install --upgrade pip' command.
我在制作 start.sh 文件时也发现了 this guide 的使用。
#!/bin/sh
pip --no-cache-dir install -r ./requirements.txt -t modules
export PYTHONPATH=$PYTHONPATH:modules
python manage.py runserver
我已经联系了 Oracle 的支持,但他们也找不到解决方案。他们的建议是在 wsgi.py 文件中包含服务器使用的 PORT 变量,我试过了。
import os
import sys
from django.core.management import call_command
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoMedmin.settings")
application = get_wsgi_application()
PORT_NUMBER = int(os.environ.get('PORT', 8084))
call_command('runserver', '0.0.0.0:'+str(PORT_NUMBER))
我错过了什么?是否可以让 django 与 Oracle 一起工作?
该指南绝对是误导性的,并且混淆了 Django 和 Flask。
runserver
命令仅用于在本地计算机上进行开发,不适合生产使用。您必须使用某种 WSGI 网络服务器来 运行 您的 Django 应用程序。
我建议你使用gunicorn
:
- 将 gunicorn 添加到您的
requirements.txt
在您的 start.sh
中启动 gunicorn:
pip --no-cache-dir install -r ./requirements.txt -t modules
export PYTHONPATH=$PYTHONPATH:modules
gunicorn -b $PORT DjangoProject.wsgi
(免责声明:在阅读您的问题之前,我什至不知道存在 Oracle ACCS)
在 Oracle 支持的更多帮助下,我设法让 Django 在应用程序容器上工作。
问题出在 settings.py
中的 ALLOWED_HOSTS
变量。我找到的教程都建议使用 ALLOWED_HOSTS = ['*']
。这不起作用。
为了让 Django 工作,我需要包含特定的 URL Oracle 分配给应用程序容器。所以像 ALLOWED_HOSTS = ['ProjectName-AccountName.oracle-region-0.oraclecloud.com']
这样的东西。
我有一个现有的 django 项目,我正试图将其部署到 Oracle 的云服务,Application Container。
我关注了Oracle's guide to do this however there are some details missing from this guide. Specifically the guide references an app.py file which seems to come from this guide。但是我看不到如何在 django 项目中使用它。
我已经尝试将对 app.py 的调用替换为使用 django 的 manage.py 或 wsgi.py 文件,但 Oracle 服务器仍然无法启动。 Oracle 提供的服务器日志也没有帮助,只告诉我正在安装 python 包。
ACCS[web.1]: Content of APP_HOME [ /u01/app/ ] dir
ACCS[web.1]: total 96
ACCS[web.1]: -rw-r----- 1 apaas apaas 28423 May 17 10:51 readme.html
ACCS[web.1]: -rw-r----- 1 apaas apaas 40960 May 17 10:51 db.sqlite3
ACCS[web.1]: -rw-r----- 1 apaas apaas 355 Sep 10 13:26 manage.py
ACCS[web.1]: -rw-r----- 1 apaas apaas 254 Sep 10 13:28 DjangoProject.pyproj.user
ACCS[web.1]: -rw-r----- 1 apaas apaas 6990 Sep 10 13:28 DjangoProject.pyproj
ACCS[web.1]: -rw-r----- 1 apaas apaas 186 Sep 12 11:24 manifest.json
ACCS[web.1]: drwxr-x--- 1 apaas apaas 10 Sep 13 03:42 obj
ACCS[web.1]: drwxr-x--- 1 apaas apaas 160 Sep 13 03:42 app
ACCS[web.1]: drwxr-x--- 1 apaas apaas 94 Sep 13 03:42 DjangoProject
ACCS[web.1]: drwxr-xr-x 1 apaas apaas 286 Sep 13 03:42 .
ACCS[web.1]: drwxr-xr-x 1 apaas apaas 46 Sep 13 03:42 ..
ACCS[web.1]: -rw-r----- 1 apaas apaas 290 Sep 13 2018 start.sh
ACCS[web.1]: -rw-r----- 1 apaas apaas 51 Sep 13 2018 requirements.txt
ACCS[web.1]: Application should listen on 0.0.0.0:$PORT [enabling app to listen on all interfaces on $PORT env variable]
ACCS[web.1]: Starting application with launch command [ sh ./start.sh ]
APP[web.1]: Collecting Django==1.11.15 (from -r ./requirements.txt (line 1))
APP[web.1]: Downloading https://files.pythonhosted.org/packages/f8/1c/31112c778b7a56ce18e3fff5e8915719fbe1cd3476c1eef557dddacfac8b/Django-1.11.15-py2.py3-none-any.whl (6.9MB)
APP[web.1]: Collecting pytz==2018.5 (from -r ./requirements.txt (line 2))
APP[web.1]: Downloading https://files.pythonhosted.org/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB)
APP[web.1]: Collecting setuptools==39.0.1 (from -r ./requirements.txt (line 3))
APP[web.1]: Downloading https://files.pythonhosted.org/packages/20/d7/04a0b689d3035143e2ff288f4b9ee4bf6ed80585cc121c90bfd85a1a8c2e/setuptools-39.0.1-py2.py3-none-any.whl (569kB)
APP[web.1]: Installing collected packages: pytz, Django, setuptools
APP[web.1]: Successfully installed Django-1.11.15 pytz-2018.5 setuptools-39.0.1
APP[web.1]: You are using pip version 9.0.1, however version 18.0 is available.
APP[web.1]: You should consider upgrading via the 'pip install --upgrade pip' command.
我在制作 start.sh 文件时也发现了 this guide 的使用。
#!/bin/sh
pip --no-cache-dir install -r ./requirements.txt -t modules
export PYTHONPATH=$PYTHONPATH:modules
python manage.py runserver
我已经联系了 Oracle 的支持,但他们也找不到解决方案。他们的建议是在 wsgi.py 文件中包含服务器使用的 PORT 变量,我试过了。
import os
import sys
from django.core.management import call_command
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoMedmin.settings")
application = get_wsgi_application()
PORT_NUMBER = int(os.environ.get('PORT', 8084))
call_command('runserver', '0.0.0.0:'+str(PORT_NUMBER))
我错过了什么?是否可以让 django 与 Oracle 一起工作?
该指南绝对是误导性的,并且混淆了 Django 和 Flask。
runserver
命令仅用于在本地计算机上进行开发,不适合生产使用。您必须使用某种 WSGI 网络服务器来 运行 您的 Django 应用程序。
我建议你使用gunicorn
:
- 将 gunicorn 添加到您的
requirements.txt
在您的
start.sh
中启动 gunicorn:pip --no-cache-dir install -r ./requirements.txt -t modules export PYTHONPATH=$PYTHONPATH:modules gunicorn -b $PORT DjangoProject.wsgi
(免责声明:在阅读您的问题之前,我什至不知道存在 Oracle ACCS)
在 Oracle 支持的更多帮助下,我设法让 Django 在应用程序容器上工作。
问题出在 settings.py
中的 ALLOWED_HOSTS
变量。我找到的教程都建议使用 ALLOWED_HOSTS = ['*']
。这不起作用。
为了让 Django 工作,我需要包含特定的 URL Oracle 分配给应用程序容器。所以像 ALLOWED_HOSTS = ['ProjectName-AccountName.oracle-region-0.oraclecloud.com']
这样的东西。