2015-12-13 188 views
10

我是不是使用Appengine。配置Django和Google雲端存儲?

我有一個運行在虛擬機上的普通vanilla Django應用程序。我想使用Google雲端存儲服務我的靜態文件,並且還需要上傳/提供我的媒體文件。

我有一個桶。

如何將我的Django應用程序鏈接到我的存儲桶?我試過django-storages。這可能會起作用,但我需要做些什麼來準備我的django應用程序使用的存儲桶?我的Django設置中需要什麼基線配置?

當前設置:

# Google Cloud Storage 
# http://django-storages.readthedocs.org/en/latest/backends/apache_libcloud.html 
LIBCLOUD_PROVIDERS = { 
    'google': { 
     'type' : 'libcloud.storage.types.Provider.GOOGLE_STORAGE', 
     'user' : <I have no idea>, 
     'key' : <ditto above>, 
     'bucket': <my bucket name>, 
    } 
} 

DEFAULT_LIBCLOUD_PROVIDER = 'google' 
DEFAULT_FILE_STORAGE = 'storages.backends.apache_libcloud.LibCloudStorage' 
STATICFILES_STORAGE = 'storages.backends.apache_libcloud.LibCloudStorage' 

回答

5

所以,這基本上工作。 (有了這個庫和設置)。

讓它工作的訣竅是知道從何處獲取libcloud的參數'user''key'

在谷歌Cloud Console > Storage上點擊Settings。然後點擊名爲Interoperability的右側選項卡。在該面板上,是一個單獨的按鈕,其中顯示了諸如Enable Interoperability之類的內容。點擊它。

瞧!你現在有一個用戶名和密鑰。


注:不要使用django-storages一封來自PyPI。它尚未更新,並且不適用於最近的Django版本。

使用此版本:

pip install -e 'git+https://github.com/jschneier/django-storages.git#egg=django-storages'


編輯:如果你想使用反向代理,那麼你可以考慮我稍作修改的版本。 https://github.com/jschneier/django-storages/compare/master...halfnibble:master

描述: 在某些情況下,可能有必要加載使用反向代理的文件。這可以用於緩解跨源請求錯誤。

這個小PR允許開發者在settings.py中設置一個可選的LIBCLOUD_PROXY_URL。

使用示例

# Apache VirtualHost conf 
ProxyPass /foo http://storage.googleapis.com 
ProxyPassReverse /foo http://storage.googleapis.com 


# settings.py 
LIBCLOUD_PROXY_URL = '/foo/' 
+0

其他注意事項。如果您需要安全的文件存儲空間,那麼我強烈推薦AWS S3和'django_s3_storage'。不幸的是,似乎沒有任何支持讀取文件的訪問控制的Google雲端存儲庫。 –

+0

因此,如果我理解正確,'django-storages'將使我能夠將Google Cloud Storage的'ImageField'用作後端。當我想在瀏覽器(或應用程序)中呈現圖像時,我是否可以訪問圖像網址? –

+0

@EvanZamir你是對的。當涉及到存儲時,ImageField應該像FileField一樣工作。 –

11

Django的儲存有谷歌雲存儲後端,但它沒有記錄,我意識到在尋找回購。得到它與此設置工作:

DEFAULT_FILE_STORAGE = 'storages.backends.gs.GSBotoStorage' 
GS_ACCESS_KEY_ID = 'YourID' 
GS_SECRET_ACCESS_KEY = 'YourKEY' 
GS_BUCKET_NAME = 'YourBucket' 
STATICFILES_STORAGE = 'storages.backends.gs.GSBotoStorage' 

要獲得YourKEY和YourID應創建Interoperability鍵,在設置選項卡。

希望它可以幫助你不必瞭解它的硬盤的方式:)

啊如果你還沒有,依賴關係是:

+0

這工作。 :-) – slumtrimpet

+0

我越來越GSResponseError:401未經授權的任何想法? – User707

+0

爲什麼需要'STATICFILES_STORAGE ='storages.backends.gs.GSBotoStorage''?它導致可瀏覽的API無法加載css文件。 – Kakaji

0

既然我無法評論艾倫瓦格納的回答,這裏是一個補充。

如果您正在使用python3,你可能會得到這個錯誤,

... 
ImportError: No module named 'google_compute_engine' 

如果是這樣,你需要安裝谷歌,計算引擎。 /etc/boto.cfg文件告訴python使用庫的2.7版本。您將不得不運行下一行來重新生成/etc/boto.cfg

python3 -c "from google_compute_engine.boto.boto_config import BotoConfig; BotoConfig()" 

另一個錯誤,你可能會碰到,

... 
File "/app/venv/lib/python3.4/site-packages/boto/gs/connection.py", line 95, in create_bucket 
    data=get_utf8_value(data)) 
File "/app/venv/lib/python3.4/site-packages/boto/s3/connection.py", line 656, in make_request 
    auth_path = self.calling_format.build_auth_path(bucket, key) 
File "/app/venv/lib/python3.4/site-packages/boto/s3/connection.py", line 94, in build_auth_path 
    path = '/' + bucket 
TypeError: Can't convert 'bytes' object to str implicitly 

我做了一個pull request來解決這個問題。如果您希望合併,您可以使用my repo作爲pip依賴項。

我會盡量保持此回購更新。我已將默認develop分支設置爲受保護。我是唯一可以提交/批准合併請求的人。我也只做了一次提交。

您必須先安裝google-compute-engine並運行該行,然後才能安裝/建立我的boto repo。