見出し画像

【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 |
\                                      /
  ------------------------------------

無事成功しました!


この記事が気に入ったらサポートをしてみませんか?