我使用django.contrib.staticfiles和django-storages將我的靜態文件部署到Amazon S3。我使用的django版本是1.10.4,而django-storage版本是1.5.2。django用django -storages collectstatic重新複製所有文件
現在,當我運行collectstatic時,即使本地文件沒有變化,它也會將本地系統中的所有文件重新複製到S3。縱觀collectstatic管理的命令代碼,我可以看到:
在方法DELETE_FILE:
# The full path of the target file
if self.local:
full_path = self.storage.path(prefixed_path)
else:
full_path = None
# Skip the file if the source file is younger
# Avoid sub-second precision (see #14665, #19540)
if (target_last_modified.replace(microsecond=0) >= source_last_modified.replace(microsecond=0) and
full_path and not (self.symlink^os.path.islink(full_path))):
if prefixed_path not in self.unmodified_files:
self.unmodified_files.append(prefixed_path)
self.log("Skipping '%s' (not modified)" % path)
return False
在調試,我看到的是,即使target_last_modified> = source_last_modified但full_path是無這就是爲什麼檢查失敗,它最終刪除遠程文件。我不確定我做錯了什麼,或者我錯過了一些設置,因爲它正在重新上傳文件。有趣的是,如果我刪除在上面的代碼額外支票,只是像檢查:
if (target_last_modified.replace(microsecond=0) >= source_last_modified.replace(microsecond=0)):
它工作正常。
我看到過類似的問題,但他們主要是由於S3與本地系統的時區不同。在我的情況下,我的本地時區和S3存儲區域都是相同的。在任何情況下,上述破解都表明該問題不是由於時區差異。
根本原因正是我所描述的。默認的collectstatic不會查找遠程存儲中文件的存在/不存在。顯然,無法使用S3Boto3Storage在遠程查看文件。無論如何現在Collectfast爲我工作。 – Divick