【发布时间】:2016-04-11 20:10:59
【问题描述】:
我是 django 新手(使用 python 2.7),我只是第一次尝试使用 heroku,但我总是收到以下错误:
remote: -----> Preparing static assets
remote: Collectstatic configuration error. To debug, run:
remote: $ heroku run python manage.py collectstatic --noinput
当我运行该命令时,出现有关 django 注册 redux 库的导入错误。我以前在 Django 中遇到过这个问题,我通过将 RequestSite 放在“requests”下并将 Site 放在“models”下来解决这个问题。这解决了问题,但错误仍然出现在 Heroku 中。
(venv) C:\Users\Carolina\Desktop\Coding\venv\project1>heroku run python manage.p
y collectstatic --noinput
Running python manage.py collectstatic --noinput on acla-acla... up, run.3645
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/_
_init__.py", line 350, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/_
_init__.py", line 324, in execute
django.setup()
File "/app/.heroku/python/lib/python2.7/site-packages/django/__init__.py", lin
e 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/app/.heroku/python/lib/python2.7/site-packages/django/apps/registry.py"
, line 115, in populate
app_config.ready()
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/admin/app
s.py", line 22, in ready
self.module.autodiscover()
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/admin/__i
nit__.py", line 26, in autodiscover
autodiscover_modules('admin', register_to=site)
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/module_load
ing.py", line 50, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File "/app/.heroku/python/lib/python2.7/importlib/__init__.py", line 37, in im
port_module
__import__(name)
File "/app/.heroku/python/lib/python2.7/site-packages/registration/admin.py",
line 2, in <module>
from django.contrib.sites.models import RequestSite
ImportError: cannot import name RequestSite
问题是 - 那条线不存在。我去了 venv/lib/site-packages/registration/admin.py 和第 2 行是这个:
from django.contrib import admin
from django.contrib.sites.requests import RequestSite # HERE
from django.contrib.sites.models import Site
from django.utils.translation import ugettext_lazy as _
from registration.models import RegistrationProfile
from registration.users import UsernameField
class RegistrationAdmin(admin.ModelAdmin):
actions = ['activate_users', 'resend_activation_email']
list_display = ('user', 'activation_key_expired')
raw_id_fields = ['user']
search_fields = ('user__{0}'.format(UsernameField()), 'user__first_name', 'user__last_name')
def activate_users(self, request, queryset):
"""
Activates the selected users, if they are not already
activated.
"""
for profile in queryset:
RegistrationProfile.objects.activate_user(profile.activation_key)
activate_users.short_description = _("Activate users")
def resend_activation_email(self, request, queryset):
"""
Re-sends activation emails for the selected users.
Note that this will *only* send activation emails for users
who are eligible to activate; emails will not be sent to users
whose activation keys have expired or who have already
activated.
"""
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
for profile in queryset:
if not profile.activation_key_expired():
profile.send_activation_email(site)
resend_activation_email.short_description = _("Re-send activation emails")
admin.site.register(RegistrationProfile, RegistrationAdmin)
这是我用 pip freeze 得到的,以防万一:
Django==1.9
django-crispy-forms==1.5.2
django-registration==2.0.3
django-registration-redux==1.2
django-tinymce==2.2.0
Pillow==3.0.0
requests==2.9.0
South==1.0.2
stripe==1.27.1
wheel==0.24.0
有人知道为什么会这样吗?提前致谢!
编辑----
好的,所以问题出在 Daniel Roseman 提到的那个问题上。该库在 pypi 中已损坏,我不得不告诉 heroku 从 github 安装它(包已修复)。 所以,我去了我的 requirements.txt 文件并替换了这一行:
django-registration-redux==1.2
用这个:
-e git://github.com/macropin/django-registration.git#egg=django-registration==1.2
(我还删除了 'django-registration==2.0.3',因为它是 django-registration-redux 的旧版本并且正在产生问题)。 希望这可以帮助遇到同样问题的人!
【问题讨论】:
-
在本地运行 collectstatic 会发生什么?
-
使用 debug=False,静态文件不会加载(但这似乎发生在很多和我看相同教程的人身上——我必须运行 python manage.py runserver—— - 他们工作不安全)。使用 debug=True,一切正常。
标签: django heroku import django-registration