2017-07-09 67 views
2

我使用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存儲區域都是相同的。在任何情況下,上述破解都表明該問題不是由於時區差異。

回答

1

我們的解決方案是使用Collectfast

https://github.com/jazzband/collectfast

它緩存和上傳文件前的MD5校驗碼進行比較。我們很想知道問題的根源,但是這解決了緩慢問題。

+2

根本原因正是我所描述的。默認的collectstatic不會查找遠程存儲中文件的存在/不存在。顯然,無法使用S3Boto3Storage在遠程查看文件。無論如何現在Collectfast爲我工作。 – Divick

相關問題