【问题标题】:Error on deploying django app to Heroku -- TypeError: argument of type 'PosixPath' is not iterable将 django 应用程序部署到 Heroku 时出错 - TypeError: 'PosixPath' 类型的参数不可迭代
【发布时间】:2020-10-13 01:07:57
【问题描述】:

这是我的第一个 django 项目,在尝试部署时出现此错误。如果有人可以帮助我,将不胜感激。 TypeError:“PosixPath”类型的参数不可迭代 运行“$ python manage.py collectstatic --noinput”时出错。

$ python manage.py collectstatic --noinput
remote:        122 static files copied to '/tmp/build_92e98a8b/staticfiles'.
remote:        Traceback (most recent call last):
remote:          File "manage.py", line 22, in <module>
remote:            main()
remote:          File "manage.py", line 18, in main
remote:            execute_from_command_line(sys.argv)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
remote:            utility.execute()
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
remote:            self.fetch_command(subcommand).run_from_argv(self.argv)
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 329, in run_from_argv
remote:            connections.close_all()
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 225, in close_all
remote:            connection.close()
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 190, in close
remote:            if not self.is_in_memory_db():
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 280, in is_in_memory_db
remote:            return self.creation.is_in_memory_db(self.settings_dict['NAME'])
remote:          File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/sqlite3/creation.py", line 12, in is_in_memory_db
remote:            return database_name == ':memory:' or 'mode=memory' in database_name
remote:        TypeError: argument of type 'PosixPath' is not iterable
remote:
remote:  !     Error while running '$ python manage.py collectstatic --noinput'.
remote:        See traceback above for details.
remote:
remote:        You may need to update application code to resolve this error.
remote:        Or, you can disable collectstatic for this application:
remote:
remote:           $ heroku config:set DISABLE_COLLECTSTATIC=1
remote:
remote:        https://devcenter.heroku.com/articles/django-assets
remote:  !     Push rejected, failed to compile Python app.
remote:
remote:  !     Push failed
remote: Verifying deploy...

这是我的 settings.py。我之前有一个静态错误,然后我添加了静态根。当我在本地运行服务器时,应用程序运行良好。

import os
from pathlib import Path        
ALLOWED_HOSTS = []
INSTALLED_APPS = [
    'blog.apps.BlogConfig',
    'users.apps.UsersConfig',
    'crispy_forms',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

]
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 = 'django_trial.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 = 'django_trial.wsgi.application'
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

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',
    },
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'

MEDIA_ROOT =   os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

CRISPY_TEMPLATE_PACK = 'bootstrap4'

LOGIN_REDIRECT_URL = 'blog-home'

LOGIN_URL = 'login'

EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST ='smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.environ.get('User')
EMAIL_HOST_PASSWORD = os.environ.get('AppPass')

【问题讨论】:

    标签: python django heroku


    【解决方案1】:

    是的,这是许多人面临的问题。要解决这个问题,请在 git bash cli 中输入这个,

    heroku config:set DISABLE_COLLECTSTATIC=1 并再次将您的网站推送到 heroku

    【讨论】:

    • 嘿,它工作得很好。谢谢你的提示。但是,有什么不同?为什么会出现这个错误?
    • 用来阻止django收集静态文件。在push我们的项目时,django在上传之前必须知道我们的静态文件的配置。
    猜你喜欢
    • 2021-02-14
    • 2021-01-15
    • 2021-09-18
    • 2019-06-25
    • 2018-12-25
    • 2021-05-16
    • 2020-08-04
    相关资源
    最近更新 更多