【Docker・Django】pip installしてるはずなのにModuleNotFoundError + curlでAccess-Control-Allow-Originを表示させる方法
ずっとModuleNotFoundError
アプリケーションはpip installしてるはずなのにdockerのログを見るとModuleNotFoundErrorが出てる。
一応再インストールしてみるけどもう入ってると言われる。
$ curl -i http://localhost:8000/api/threads/?format=json curl: (52) Empty reply from server $ docker logs q-share-app-web : : File "<frozen importlib._bootstrap>", line 994, in _gcd_import File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked ModuleNotFoundError: No module named 'corsheaders' $ pip install django-cors-headers Requirement already satisfied: django-cors-headers in /Users/sane/.pyenv/versions/3.6.2/lib/python3.6/site-packages (2.2.0)
原因
pip installしてるのに、モジュールねえよと言われる。
どうやら、コンテナを生成する時にrequirementsからpip installしてるっぽい。
ということで、一度ストップしてから再生成する。
$ docker-compose stop $ docker-compose build : : Collecting django-cors-headers (from -r requirements.txt (line 7)) Downloading https://files.pythonhosted.org/packages/b1/bc/0414cf96a2e4a917b1f53b638f34f4999cc9a97fadbd1420054cc11b4ad2/django_cors_headers-2.2.0-py2.py3-none-any.whl Collecting pytz (from Django==2.0.5->-r requirements.txt (line 1)) Downloading https://files.pythonhosted.org/packages/dc/83/15f7833b70d3e067ca91467ca245bae0f6fe56ddc7451aa0dc5606b120f2/pytz-2018.4-py2.py3-none-any.whl (510kB) : $ docker-compose up -d
うん、インストールしてるっぽい。
curlで確認
普通に「curl -i example.com」としてもAccess-Control-Allow-Originが出てくれないので以下のようにする。
$ curl -H "Origin: http://example.com" --verbose http://localhost:8000/api/threads/?format=json * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 8000 (#0) > GET /api/threads/?format=json HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.58.0 > Accept: */* > Origin: http://example.com > < HTTP/1.1 200 OK < Date: Sat, 16 Jun 2018 07:01:41 GMT < Server: WSGIServer/0.2 CPython/3.6.5 < Content-Type: application/json < Vary: Accept, Cookie < Allow: GET, POST, HEAD, OPTIONS < Content-Length: 374 < Access-Control-Allow-Origin: * < X-Frame-Options: SAMEORIGIN < * Connection #0 to host localhost left intact [{"id":2,"name":"Thread2","description":"this is thread 2.","url":"thread-2","views":49,"category":{"id":1,"name":"プログラミング"},"tag":[{"id":2,"name":"Java"}]},{"id":1,"name":"Thread1","description":"this is thread 1.","url":"thread-1","views":4,"category":{"id":1,"name":"プログラミング"},"tag":[{"id":3,"name":"Deep Learning"},{"id":1,"name":"Python"}]}]
OK。
curlのやり方は以下を参考にした。
stackoverflow.com