2013-12-09 92 views
4

我用靜態文件部署了一個使用heroku和AWS S3的django應用程序,問題是我還沒有找到關於如何將heroku的Postgres數據庫與S3服務相關聯的信息。使用AWS S3爲django提供heroku上的靜態文件?

我已經設置了AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,S3_BUCKET,添加CORS配置,但我的問題是如何將S3存儲與Heroku的postgres數據庫鏈接?這可能嗎?

這是我的模特在管理員看來的樣子,但如果我在這裏上傳圖片,5分鐘後消失。 Image Upload for the model http://ishopss.com/imageUpload.png

當然,我可以使用這樣的靜態URL,但問題是,我想顯示不同的圖像爲非常當然,不是所有的相同的圖像。 serve in the db http://ishopss.com/for.png

所以我的代碼需要是這樣的,服務於不同的圖像 aws static file http://ishopss.com/course.png

我希望有人能幫助我,謝謝。

回答

6

我發現這個職位的解決方案:

http://blog.doismellburning.co.uk/2012/06/25/django-and-static-files/

http://offbytwo.com/2012/01/18/deploying-django-to-heroku.html

https://devcenter.heroku.com/articles/s3

基本上我需要下載伯特(PIP安裝伯特),並把它放在requirements.txt(PIP凍結> requirements.txt),並在settings.py加:

INSTALLED_APPS = ('storages',) 

AWS_ACCESS_KEY_ID = 'xxxxxx' 
AWS_SECRET_ACCESS_KEY = 'xxxxxxx' 
AWS_STORAGE_BUCKET_NAME = 'bucket_name' 


STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 

STATIC_URL = 'http://s3.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME + '/' 

然後,你需要使用

$ heroku config:set AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy 
$ heroku config:set S3_BUCKET_NAME=appname-assets 

更新src和HREF在HTML文件設置 'AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_STORAGE_BUCKET_NAME'

url http://ishopss.com/url.png

最後,你需要更新https://console.aws.amazon.com/

+1

請使用通過在模板中對「STATIC_URL」進行硬編碼來實現'{%static%}'標記。很高興這個帖子很有用! –

1

請看看這裏:

可能會簡單的方法爲您服務。我支持{{course.image}}從頭開始工作。如果沒有 - 您可以在AWS上創建CDN點,並將CDN網址存儲在您的django設置文件中。之後,你的HTML應該是這樣的:

{{ settings.CDN_URL }}/{{ course.image }} 

如果你喜歡糖,和甲肝一段時間,你可以寫你自己的templatetags,它會做這樣的:

{% my_static course,.image %} 
+1

的權限,不要硬編碼的連接(即在模板中使用'CDN_URL');相反,使用'{%static%}'標記 - 無論您的存儲如何,它都會處理URL創建 - http://staticfiles.productiondjango.com/blog/stop-using-static-url-in-templates/ –