【pythonanywhere】本番環境へデプロイするときに必要な調整
またまたpythonanywhereでデプロイを失敗しました。
いつも原因が違うのですが今回のポイントはこちらです。
・本番環境と開発環境の違い
実行コマンド
pa_autoconfigure_django.py --python=3.9 https://github.com/Naoki0618/SNS_Django.git --nuke
エラーログ
Traceback (most recent call last):
File "/home/naoki6134/naoki6134.pythonanywhere.com/manage.py", line 22, in <module>
main()
File "/home/naoki6134/naoki6134.pythonanywhere.com/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/naoki6134/.virtualenvs/naoki6134.pythonanywhere.com/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_comman
d_line
utility.execute()
File "/home/naoki6134/.virtualenvs/naoki6134.pythonanywhere.com/lib/python3.9/site-packages/django/core/management/__init__.py", line 420, in execute
django.setup()
File "/home/naoki6134/.virtualenvs/naoki6134.pythonanywhere.com/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/naoki6134/.virtualenvs/naoki6134.pythonanywhere.com/lib/python3.9/site-packages/django/apps/registry.py", line 91, in populate
app_config = AppConfig.create(entry)
File "/home/naoki6134/.virtualenvs/naoki6134.pythonanywhere.com/lib/python3.9/site-packages/django/apps/config.py", line 193, in create
import_module(entry)
File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'bootstrap4'
Traceback (most recent call last):
File "/home/naoki6134/.local/bin/pa_autoconfigure_django.py", line 49, in <module>
main(
File "/home/naoki6134/.local/bin/pa_autoconfigure_django.py", line 39, in main
project.run_collectstatic()
File "/home/naoki6134/.local/lib/python3.9/site-packages/pythonanywhere/django_project.py", line 118, in run_collectstatic
subprocess.check_call([
File "/usr/local/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/home/naoki6134/.virtualenvs/naoki6134.pythonanywhere.com/bin/python', '/home/naoki6134/naoki6134.pythonanywhere.com/mana
ge.py', 'collectstatic', '--noinput']' returned non-zero exit status 1.
エラーログのポイント
問題1.モジュールが足りていない
ModuleNotFoundError: No module named 'bootstrap4'
問題2.collectstaticがうまくできていない
subprocess.CalledProcessError: Command '['/home/naoki6134/.virtualenvs/naoki6134.pythonanywhere.com/bin/python', '/home/naoki6134/naoki6134.pythonanywhere.com/mana
ge.py', 'collectstatic', '--noinput']' returned non-zero exit status 1.
「pip install bootstrap4」はやったつもりなんですけど。。。
それにcollectstaticて何かエラーを起こす原因あったっけ。。。
モジュール不足への対応
requirements.txtの追加
開発環境と本番環境をそろえるために準備するファイルです。
「pa_autoconfigure_django」実行時にこのファイルをもとにモジュールをインストールしてくれます。
格納場所はプロジェクトフォルダ直下です。
こちらはサンプルです。
asgiref==3.5.2
beautifulsoup4==4.11.1
Django==4.1.3
django-bootstrap4==22.2
Pillow==9.3.0
soupsieve==2.3.2.post1
sqlparse==0.4.3
tzdata==2022.6
ファイルを準備するときには下記コマンドを実施します。
本コマンドを使用することで開発環境で利用しているパッケージリストを準備することができます。
pip freeze > requirements.txt
ここまで準備したあとでもう一度試してみると。。。
SystemCheckError: System check identified some issues:
ERRORS:
?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.
Traceback (most recent call last):
File "/home/naoki6134/.local/bin/pa_autoconfigure_django.py", line 49, in <module>
main(
File "/home/naoki6134/.local/bin/pa_autoconfigure_django.py", line 39, in main
project.run_collectstatic()
File "/home/naoki6134/.local/lib/python3.9/site-packages/pythonanywhere/django_project.py", line 118, in run_collectstatic
subprocess.check_call([
File "/usr/local/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/home/naoki6134/.virtualenvs/naoki6134.pythonanywhere.com/bin/python', '/home/naoki6134/naoki6134.pythonanywhere.com/mana
ge.py', 'collectstatic', '--noinput']' returned non-zero exit status 1.
モジュールが足りないエラーはなくなりました!!
残りはcollectstaticです。
collectstaticにおける要点
本番環境にデプロイする際にはstaticファイルの参照先を変える必要があるようです。
settings.py
# STATICFILES_DIRS = (
# os.path.join(BASE_DIR, "static"),
# )
# こちらに変更する
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS
STATICFILES_DIRSは開発時に登録されたディレクトリを参照するパラメータです。
STATIC_ROOT
こちらが本番環境用のStaticファイルを置くディレクトリになります。
以上を踏まえて再度実行してみると。。。
____________________________________
/ \
| All done! Your site is now live at |
| https://naoki6134.pythonanywhere.com |
\ /
------------------------------------
無事成功しました!
この記事が気に入ったらサポートをしてみませんか?