前提・実現したい
Nginx + Django + DjangoChannels で構成された、Websocket 通信による非同期処理を実装した Web アプリケーションの開発を行っています。
docker for windows, docker-compose
でビルドし、既に heroku 上にデプロイし運用しています。
開発環境をビルドし直したところ、正常にビルドできなくなっている状態です。
ディレクトリ構成
※ /project dir
※ | └docker-composer.yml
※ |
※ ├app/
※ | ├django.ini
※ | ├Dockerfile
※ | └requirement.txt
※ |
※ ├web/
※ | ├log/
※ | ├default.conf
※ | ├Dockerfile
※ | ├heroku.conf
※ | └uwsgi_params
※ |
※ ├worker/
※ | └Dockerfile
発生している問題・エラーメッセージ
docker のコンテナ・イメージを全消去し、docker-compose build
を叩いたところ以下エラーが出てしまいビルドできない状態です。
Building wheels for collected packages: uwsgi, psycopg2, PyYAML, django-allauth Building wheel for uwsgi (setup.py): started Building wheel for uwsgi (setup.py): finished with status 'error' ERROR: Command errored out with exit status 1: command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-o32b_qp1/uwsgi/setup.py'"'"'; __file__='"'"'/tmp/pip-install-o32b_qp1/uwsgi/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-b7s5zrg4 cwd: /tmp/pip-install-o32b_qp1/uwsgi/ Complete output (125 lines): using profile: buildconf/default.ini detected include path: ['/usr/lib/gcc/x86_64-linux-gnu/8/include', '/usr/local/include', '/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed', '/usr/include/x86_64-linux-gnu', '/usr/include'] /usr/local/lib/python3.7/site-packages/setuptools/dist.py:470: UserWarning: The version specified ('2.1-dev-418c0ca1') is an invalid version, this may not work as expected with newer versions of setuptools, pip, and PyPI. Please see PEP 440 for more details. "details." % version running bdist_wheel running build running build_py creating build creating build/lib copying uwsgidecorators.py -> build/lib installing to build/bdist.linux-x86_64/wheel running install using profile: buildconf/default.ini detected include path: ['/usr/lib/gcc/x86_64-linux-gnu/8/include', '/usr/local/include', '/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed', '/usr/include/x86_64-linux-gnu', '/usr/include'] Patching "bin_name" to properly install_scripts dir detected CPU cores: 1 configured CFLAGS: -O2 -I. -Wall -Werror -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -DUWSGI_HAS_IFADDRS -DUWSGI_ZLIB -DUWSGI_LOCK_USE_MUTEX -DUWSGI_EVENT_USE_EPOLL -DUWSGI_EVENT_TIMER_USE_TIMERFD -DUWSGI_EVENT_FILEMONITOR_USE_INOTIFY -DUWSGI_PCRE -DUWSGI_ROUTING -DUWSGI_UUID -DUWSGI_VERSION="\"2.1-dev-418c0ca1\"" -DUWSGI_VERSION_BASE="2" -DUWSGI_VERSION_MAJOR="1" -DUWSGI_VERSION_MINOR="0" -DUWSGI_VERSION_REVISION="0" -DUWSGI_VERSION_CUSTOM="\"dev-418c0ca1\"" -DUWSGI_YAML -DUWSGI_SSL -I/usr/include/libxml2 -DUWSGI_XML -DUWSGI_XML_LIBXML2 -DUWSGI_PLUGIN_DIR="\".\"" -DUWSGI_DECLARE_EMBEDDED_PLUGINS="UDEP(python);UDEP(gevent);UDEP(ping);UDEP(cache);UDEP(nagios);UDEP(rrdtool);UDEP(carbon);UDEP(rpc);UDEP(corerouter);UDEP(fastrouter);UDEP(http);UDEP(ugreen);UDEP(signal);UDEP(syslog);UDEP(rsyslog);UDEP(logsocket);UDEP(router_uwsgi);UDEP(router_redirect);UDEP(router_basicauth);UDEP(zergpool);UDEP(redislog);UDEP(mongodblog);UDEP(router_rewrite);UDEP(router_http);UDEP(logfile);UDEP(router_cache);UDEP(rawrouter);UDEP(router_static);UDEP(sslrouter);UDEP(spooler);UDEP(cheaper_busyness);UDEP(symcall);UDEP(transformation_tofile);UDEP(transformation_gzip);UDEP(transformation_chunked);UDEP(transformation_offload);UDEP(router_memcached);UDEP(router_redis);UDEP(router_hash);UDEP(router_expires);UDEP(router_metrics);UDEP(transformation_template);UDEP(stats_pusher_socket);UDEP(router_fcgi);" -DUWSGI_LOAD_EMBEDDED_PLUGINS="ULEP(python);ULEP(gevent);ULEP(ping);ULEP(cache);ULEP(nagios);ULEP(rrdtool);ULEP(carbon);ULEP(rpc);ULEP(corerouter);ULEP(fastrouter);ULEP(http);ULEP(ugreen);ULEP(signal);ULEP(syslog);ULEP(rsyslog);ULEP(logsocket);ULEP(router_uwsgi);ULEP(router_redirect);ULEP(router_basicauth);ULEP(zergpool);ULEP(redislog);ULEP(mongodblog);ULEP(router_rewrite);ULEP(router_http);ULEP(logfile);ULEP(router_cache);ULEP(rawrouter);ULEP(router_static);ULEP(sslrouter);ULEP(spooler);ULEP(cheaper_busyness);ULEP(symcall);ULEP(transformation_tofile);ULEP(transformation_gzip);ULEP(transformation_chunked);ULEP(transformation_offload);ULEP(router_memcached);ULEP(router_redis);ULEP(router_hash);ULEP(router_expires);ULEP(router_metrics);ULEP(transformation_template);ULEP(stats_pusher_socket);ULEP(router_fcgi);" *** uWSGI compiling server core *** [gcc -pthread] core/utils.o [gcc -pthread] core/protocol.o [gcc -pthread] core/socket.o [gcc -pthread] core/logging.o [gcc -pthread] core/master.o ========= 省略 =================== [gcc -pthread] core/ssl.o [gcc -pthread] core/legion.o [gcc -pthread] core/xmlconf.o [gcc -pthread] core/dot_h.o [gcc -pthread] core/config_py.o *** uWSGI compiling embedded plugins *** Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-install-o32b_qp1/uwsgi/setup.py", line 150, in <module> install_requires=get_extra_require() File "/usr/local/lib/python3.7/site-packages/setuptools/__init__.py", line 153, in setup return distutils.core.setup(**attrs) File "/usr/local/lib/python3.7/distutils/core.py", line 148, in setup dist.run_commands() File "/usr/local/lib/python3.7/distutils/dist.py", line 966, in run_commands self.run_command(cmd) File "/usr/local/lib/python3.7/distutils/dist.py", line 985, in run_command cmd_obj.run() File "/usr/local/lib/python3.7/site-packages/wheel/bdist_wheel.py", line 326, in run self.run_command('install') File "/usr/local/lib/python3.7/distutils/cmd.py", line 313, in run_command self.distribution.run_command(command) File "/usr/local/lib/python3.7/distutils/dist.py", line 985, in run_command cmd_obj.run() File "/tmp/pip-install-o32b_qp1/uwsgi/setup.py", line 78, in run uc.build_uwsgi(conf) File "/tmp/pip-install-o32b_qp1/uwsgi/uwsgiconfig.py", line 463, in build_uwsgi path, up = get_plugin_up(path) File "/tmp/pip-install-o32b_qp1/uwsgi/uwsgiconfig.py", line 1414, in get_plugin_up execfile('%s/uwsgiplugin.py' % path, up) File "/tmp/pip-install-o32b_qp1/uwsgi/uwsgiconfig.py", line 1399, in execfile code = __builtins__.compile(py.read(), path, 'exec') AttributeError: 'dict' object has no attribute 'compile' ---------------------------------------- ERROR: Failed building wheel for uwsgi
該当のソースコード
Dockerfile - Woker
FROM python:3.7 ENV PYTHONUNBUFFERED 1 # Set up project root. RUN mkdir app WORKDIR /app # Install packages before copy sources, for building cache. COPY ./.docker/app/requirements.txt /app/.docker/app/requirements.txt RUN pip install -r /app/.docker/app/requirements.txt # Copy source codes. COPY . /app # Run application servers. # # [celery] Job worker # $ celery -A django_project worker --concurrency=1 -l debug # Attach mode. # $ celery -A django_project worker --detach --pidfile="/path" # Detach mode. CMD celery -A djangdock worker -l info
Dockerfile - app
FROM python:3.7 ENV PYTHONUNBUFFERED 1 # Set up project root. RUN mkdir app WORKDIR /app # Install packages before copy sources, for building cache. COPY ./.docker/app/requirements.txt /app/.docker/app/requirements.txt RUN pip install -r /app/.docker/app/requirements.txt # Copy source codes. COPY . /app # Run application servers. # # [uwsgi] HTTP # $ uwsgi --ini django.ini --master # Attach mode. # $ uwsgi --ini django.ini --master -d /path/to/logfile # Detach mode. # # [uvicorn] WebSocket # $ uvicorn django_project.asgi:application --reload # Hot reload for dev. # $ uvicorn django_project.asgi:application --host 127.0.0.1 --port 8000 # Attach mode. # $ uvicorn django_project.asgi:application --uds /tmp/uvicorn.sock # Using unix socket. # $ uvicorn django_project.asgi:application --ssl-keyfile hoge.key --ssl-certfile hoge.pem # SSL. ARG CREDENTIAL CMD uwsgi --ini /app/.docker/app/django.ini --master -d /dev/stdout && \ uvicorn djangdock.asgi:application --host 0.0.0.0 --port 443 --reload --proxy-headers --ssl-keyfile .credentials/${CREDENTIAL}.key --ssl-certfile .credentials/${CREDENTIAL}.crt
Dockerefile - web
FROM nginx:1.15.6 # Fix settings. ARG DOMAIN ARG CREDENTIAL COPY ./default.conf /etc/nginx/conf.d/default.conf RUN sed -e "s/DOMAIN/${DOMAIN}/g" -i /etc/nginx/conf.d/default.conf RUN sed -e "s/CREDENTIAL/${CREDENTIAL}/g" -i /etc/nginx/conf.d/default.conf RUN cat /etc/nginx/conf.d/default.conf # Run web server. CMD nginx -g "daemon off;"
requirements.txt
ipython django git+https://github.com/unbit/uwsgi.git@master#egg=uwsgi psycopg2 PyYAML dj-database-url django_extensions django-allauth uvicorn >= 0.8.1 channels channels-redis redis celery django-celery-results
試したこと
requirements.txt
で git から uwsgi をクローンする記述をコメントアウトし、uwsgi
を追加して docker-compose build
を実行しました。
すると uwsgi 自体のビルドはできるのですが、docker-compose up
するとコンソールに下記メッセージが出続けてしまいます。
uwsgi_check_logrotate()/lseek(): Illegal seek [core/logging.c line 494]
上記を避けるため、requirements.txt
にて git から uwsgi をクローンしています。
https://github.com/unbit/uwsgi/pull/1855
エラー文に AttributeError: 'dict' object has no attribute 'compile'
と出るのですが、該当する記事もなく具体的な解決方法を見つけることが出来ていない状態です。
補足情報(FW/ツールのバージョンなど)
platform
- docker 19.03.1
- docker-compose 1.24.1
back-end
- nginx 1.15.6
- postgres 11
- redis 5.0.3
- python 3.7
- django 2.2.1
- django/channels
- django-celery-results
- uwsgi
- uvicorn
- celery
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。