Django 1.10: ошибка в django-хранилищах на S3: не наивная дата-время (tzinfo уже установлена)
Я начал получать ошибку с момента обновления до Django 1.10. Я использую Django 1.10 на Python 3.5 с django-storages==1.5.0
а также boto3==1.4.0
,
You have requested to collect static files at the destination
location as specified in your settings.
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/management/__init__.py", line 359, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/management/base.py", line 305, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/management/base.py", line 356, in execute
output = self.handle(*args, **options)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 193, in handle
collected = self.collect()
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 124, in collect
handler(path, prefixed_path, storage)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 337, in copy_file
if not self.delete_file(path, prefixed_path, source_storage):
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 258, in delete_file
target_last_modified = self.storage.get_modified_time(prefixed_path)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/files/storage.py", line 231, in get_modified_time
return _possibly_make_aware(dt)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/core/files/storage.py", line 243, in _possibly_make_aware
return timezone.make_aware(dt, tz).astimezone(timezone.utc)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/django/utils/timezone.py", line 368, in make_aware
return timezone.localize(value, is_dst=is_dst)
File "/home/vagrant/.virtualenvs/wrds-classroom/lib/python3.5/site-packages/pytz/tzinfo.py", line 304, in localize
raise ValueError('Not naive datetime (tzinfo is already set)')
ValueError: Not naive datetime (tzinfo is already set)
Changeing USE_TZ
в False
изменяет ошибку, но я все еще не уверен, почему это вызвано (для меня это новая территория в кодовой базе Django):
TypeError: can't compare offset-naive and offset-aware datetimes
Есть идеи, в чем причина?
1 ответ
ОБНОВИТЬ:
Я обновляю свой собственный ответ, так как этот запрос теперь объединен. Чтобы исправить, просто используйте версию 1.5.1
в вашем requirements.txt
или же pip install
команда:
django-storages==1.5.1
ОТ СРОКА ОТВЕТА НА КОНТЕКСТ:
Я выяснил временное исправление, которое должно привести к постоянному исправлению.
После еще одного спора друг нашел этот пиар, который, как он думал, может быть связан: https://github.com/jschneier/django-storages/pull/181
Я заметил, что дата запроса на загрузку была через два дня после последнего выпуска django-хранилищ (1.5.0), который я запускал. В моем requirements.txt
Я просто сделал это, указывая на хеш коммита:
#django-storages==1.5.0
git+https://github.com/jschneier/django-storages.git#5f280571ee1ae93ee66ed805b53b08bfe5ab9f0c
boto3==1.4.0
Затем pip install --upgrade -r requirements.txt
и побежал collectstatic
снова и больше ошибок нет! Я предполагаю, что это исправление будет включено в релиз 1.5.1, после чего я просто поменяю свой requirements.txt
снова.