我正在尝试使用Dockerfile的自定义映像在GAE上部署Django应用。我遵循Google提供的example。但是我在最后一步有问题:
CMD gunicorn -b :$PORT main:app
我已经尝试了好几种方法,但是一直在说找不到我的模块。
我尝试过的:
CMD gunicorn -b :$PORT wsgi:app
CMD gunicorn -b :$PORT mydjangoproject/wsgi:app
CMD gunicorn -b :$PORT mydjangoproject.wsgi
Dockerfile:
FROM solalsab/clarins:1.0.1
# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
# Use -p python3 or -p python3.7 to select python version. Default is version 2.
RUN virtualenv /env
# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt
# Add the application source code.
ADD . /app
# Run a WSGI server to serve the application. gunicorn must be declared as
# a dependency in requirements.txt.
CMD gunicorn -b :$PORT main:app
项目的结构:
+myproject/
+mydjangoproject/
| +wsgi.py
| +...
+app_template.yaml
+generate_app_yaml.pu
+manage.py
+requirements.txt
+Dockerfile
错误消息:
ERROR: (gcloud.app.deploy) Error Response: [9]
Application startup error:
[2019-03-06 11:15:47 +0000] [6] [INFO] Starting gunicorn 19.9.0
[2019-03-06 11:15:47 +0000] [6] [INFO] Listening at: http://0.0.0.0:8080 (6)
[2019-03-06 11:15:47 +0000] [6] [INFO] Using worker: sync
[2019-03-06 11:15:47 +0000] [9] [INFO] Booting worker with pid: 9
[2019-03-06 11:15:47 +0000] [9] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/env/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/env/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process
self.load_wsgi()
File "/env/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
self.wsgi = self.app.wsgi()
File "/env/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/env/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
return self.load_wsgiapp()
File "/env/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
return util.import_app(self.app_uri)
File "/env/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app
__import__(module)
ModuleNotFoundError: No module named 'main'
[2019-03-06 11:15:47 +0000] [9] [INFO] Worker exiting (pid: 9)
[2019-03-06 11:15:47 +0000] [6] [INFO] Shutting down: Master
[2019-03-06 11:15:47 +0000] [6] [INFO] Reason: Worker failed to boot.
预先感谢您的帮助!
答案 0 :(得分:0)
main:app
部分可能来自其他代码示例(例如here),其中添加了main.py文件来引用您的应用。您可以在根目录中创建该main.py
文件,然后添加:
from mydjangoproject.wsgi import application
app = application
或者像这样更新您的Dockerfile:
CMD gunicorn -b :$PORT mydjangoproject.wsgi
答案 1 :(得分:0)
我终于通过运行成功使其运行:
CMD CD应用; exec gunicorn mydjangoproject.wsgi