質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

受付中

Djangoの本番運用環境で配信用の静的ファイルをディレクトリに配置しようとするとエラーが発生する。(python manege.py collectstaicコマンドでエラー発生)

peacesgallery
peacesgallery

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

1回答

0評価

1クリップ

987閲覧

投稿2020/09/13 09:38

編集2022/01/12 10:55

Djangoの本番運用環境で配信用の静的ファイルをディレクトリに配置しようとするとエラーが発生する。(python manege.py collectstaicコマンドでエラー発生)

「動かして学ぶ!PythonDjango開発入門」という書籍を参考に進めています。

AWSのEC2インスタンスにSSH接続している状態で、Nginx管轄の公開ディレクトリにDjangoのプロジェクトディレクトリにある静的ファイルをコピーしたいのですが、以下のようにエラーが発生し行き詰まっています。

EC2インスタンスにSSH接続

$ ssh EC2_app_admin

静的ファイルを配置するディレクトリを以下のコマンドを実行して作成後、配置ディレクトリの所有者を変更。

$ sudo mkdir -p /usr/share/nginx/html/static $ sudo mkdir /usr/share/nginx/html/media $ sudo chown app_admin /usr/share/nginx/html/static $ sudo chown app_admin /usr/share/nginx/html/media

Python仮想環境に入り、manage.pyがあるディレクトリに移動。続いてcollectstaticコマンドを実行

$ source ~/venv_private_diary/bin/activate $ cd ~/venv_private_diary/private_diary $ python manage.py collectstatic

すると以下のようにエラーが発生します。

Traceback (most recent call last): File "manage.py", line 21, in <module> main() File "manage.py", line 17, in main execute_from_command_line(sys.argv) File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line utility.execute() File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv self.execute(*args, **cmd_options) File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/core/management/base.py", line 364, in execute output = self.handle(*args, **options) File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 188, in handle collected = self.collect() File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 114, in collect handler(path, prefixed_path, storage) File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 342, in copy_file if not self.delete_file(path, prefixed_path, source_storage): File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 249, in delete_file if self.storage.exists(prefixed_path): File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/core/files/storage.py", line 310, in exists return os.path.exists(self.path(name)) File "/home/app_admin/venv_private_diary/lib64/python3.7/site-packages/django/contrib/staticfiles/storage.py", line 44, in path raise ImproperlyConfigured("You're using the staticfiles app " django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.

settings.pyは以下のように設定しています。

from .settings_common import * # デバックモードを有効にするかどうか(本番環境では必ずFalseにする) DEBUG = False # 許可するホスト名のリスト ALLOWED_HOSTS = [os.environ.get('ALLOWED_HOSTS')] # 静的ファイルを配置する場所 STATIC_ROOT = '/usr/share/nginx/html/static' MEDIA_ROOT = '/usr/share/nginx/html/media' # Amazon SES関連設定 AWS_SES_ACCESS_KEY_ID = os.environ.get('AWS_SES_ACCESS_KEY_ID') AWS_SES_SECRET_ACCESS_KEY = os.environ.get('AWS_SES_SECRET_ACCESS_KEY') EMAIL_BACKEND = 'django_ses.SESBackend' # ロギング LOGGING = { 'version': 1, 'disable_existing_loggers': False, # ロガーの設定 'loggers': { # Djangoが利用するロガー 'django': { 'handlers': ['file'], 'level': 'INFO', }, # diaryアプリケーションが利用するロガー 'diary': { 'handlers': ['file'], 'level': 'INFO', }, }, # ハンドラの設定 'handlers': { 'file': { 'level': 'INFO', 'class': 'logging.handlers.TimedRotatingFileHandler', 'filename': os.path.join(BASE_DIR, 'logs/django.log'), 'formatter': 'prod', 'when': 'D', # ログローテーション(新しいファイルへの切り替え)間隔の単位(D=日) 'interval': 1, # ログローテーション間隔(一日単位) 'backupCount': 7, # 保存しておくログファイル数 }, }, # フォーマッタの設定 'formatters': { 'prod': { 'format': '\t'.join([ '%(asctime)s', '[%(levelname)s]', '%(pathname)s(Line:%(lineno)d)', '%(message)s' ]) }, } }

settings_common.pyは以下のように設定しています。

""" Django settings for private_diary project. Generated by 'django-admin startproject' using Django 2.2.2. For more information on this file, see https://docs.djangoproject.com/en/2.2/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.2/ref/settings/ """ from django.contrib.messages import constants as messages import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'kobxonc)5vx3ix4mu2%#6y&bqx8wx8#5)z75)f3r3ow#llxj25' # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'diary.apps.DiaryConfig', 'accounts.apps.AccountsConfig', 'django.contrib.sites', 'allauth', 'allauth.account', 'django_ses', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'private_diary.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'private_diary.wsgi.application' # Database # https://docs.djangoproject.com/en/2.2/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'private_diary', 'USER': os.environ.get('DB_USER'), 'PASSWORD': os.environ.get('DB_PASSWORD'), 'HOST': '', 'PORT': '', } } # Password validation # https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/2.2/topics/i18n/ LANGUAGE_CODE = 'ja' TIME_ZONE = 'Asia/Tokyo' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), ) # 画像を配信するURLのホスト名以下のルートURLに使用 MEDIA_URL = '/media/' MESSAGE_TAGS = { messages.ERROR: 'alert alert-danger', messages.WARNING: 'alert alert-warning', messages.SUCCESS: 'alert alert-success', messages.INFO: 'alert alert-info', } AUTH_USER_MODEL = 'accounts.CustomUser' SITE_ID = 1 AUTHENTICATION_BACKENDS = ( 'allauth.account.auth_backends.AuthenticationBackend', 'django.contrib.auth.backends.ModelBackend', ) ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_USERNAME_REQUIRED = False ACCOUNT_EMAIL_VERIFICATION = 'mandatory' ACCOUNT_EMAIL_REQUIRED = True LOGIN_REDIRECT_URL = 'diary:diary_list' ACCOUNT_LOGOUT_REDIRECT_URL = 'account_login' ACCOUNT_LOGOUT_ON_GET = True ACCOUNT_EMAIL_SUBJECT_PREFIX = '' DEFAULT_FROM_EMAIL = 'admin@example.com' # バックアップバッチ用 BACKUP_PATH = 'backup/' NUM_SAVED_BACKUP = 30

対処法があれば教えて頂けると嬉しいです。よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

llr114
llr114

2020/09/14 02:20

ディレクトリの構成を教えて頂いてもいいですか? 主に、setting\.pyとstaticフォルダの位置関係が知りたいです。
peacesgallery
peacesgallery

2020/09/15 02:45

質問内容に位置関係を追加してるので、ご確認頂けると嬉しいです。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。