2012-03-25 42 views
3

我正在GoogleAppEngine(GAE)1.6.3使用Python 2.7和1.3的Django Django管理媒體文件,具有:地點在谷歌應用程序引擎

libraries: 
- name: django 
    version: "1.3" 
app.yaml

。下面應在URL /static/admin服務管理媒體文件:

- url: /static/admin 
    static_dir: django/contrib/admin/media 
    expiration: '0' 

,但我得到了這樣的管理媒體(CSS等)404。我是否使用Django管理員媒體文件的正確位置?

回答

3

執行此操作的最佳方法是將media目錄複製或符號鏈接到本地​​文件的應用程序目錄中,以便將其與應用程序的文件一起上載。然後你的app.yaml可以引用app目錄中的相對路徑。

有一個$PYTHON_LIB變量替換,你可以在app.yaml路徑中使用,但它看起來像Django是不是$PYTHON_LIB下在Python 2.7運行時的現場版。

+0

謝謝您的回覆,我也有您的書,非常好的一本書,雖然今天有點過時了。因此,沒有辦法將GAE靜態文件處理程序設置爲指向Live上的Django管理媒體?我已經按照通常的方式在本地整理了它,Live是問題所在。所以我必須上傳所有的Django Admin媒體文件,對嗎?我想我可以避免這一點。 – 2012-03-26 08:56:46

+0

必須複製所有文件,並將它們與其餘文件一起上傳。僅管理員靜態文件是640Kb。這是我整個應用程序的一半以上!任何計劃來「解決」這個?謝謝! – 2012-03-26 14:32:17

+0

靜態文件服務器完全獨立於應用程序服務器,因此沒有自己的Django副本。如果您希望靜態文件服務器提供這些服務,則必須將其作爲應用的一部分上傳。另一種選擇是編寫一個小應用程序,從應用程序服務器提供服務,它可以使用'inspect.getfile(django)'或類似的東西找到Django目錄。 (感謝這本書上的讚美,我正在積極研究第二版:) :) – 2012-04-01 18:02:41

0

是可能的靜態文件引用變量$ PYTHON_LIB部署?

文件的app.yaml

application: hello 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: true 

libraries: 
- name: django 
    version: "1.3" 

handlers: 
- url: /admin/media 
    static_dir: $PYTHON_LIB/lib/django_1_3/django/contrib/admin/media 

builtins: 
- django_wsgi: on 

日誌地方:

信息2012-04-03 02:06:19,200 dev_appserver.py:2884]「GET /管理/媒體/ CSS/base.css HTTP/1.1" 200 -

INFO 2012-04-03 02:06:19207 dev_appserver.py:2884] 「GET /admin/media/css/dashboard.css HTTP/1.1」 200 -

INFO 20 03年12月4日02:06:19242 dev_appserver.py:2884] 「GET /admin/media/img/admin/default-bg.gif HTTP/1.1」 200 -

日誌錯誤部署應用程式:

2012-04-02 19:17:32.775 /admin/media/css/dashboard.css 404 6ms的0KB

    • [02 /月/ 2012:19:17:32 -0700] 「GET /admin/media/css/dashboard.css HTTP/1.1」404

未找到處理程序引用的靜態文件:$ PYTHON_LIB/lib/django_1_3/django/contrib/admin/media/css/dashboard。CSS

+0

請按照上面Dan Sanderson的回答中的評論。 – 2012-04-03 07:27:09

+0

好的,謝謝。靜態文件服務器完全獨立於應用程序服務器。我不喜歡解決方案將靜態文件複製到我的應用程序 – rroldanh 2012-04-03 11:51:02

+0

是的,它也減慢了它的速度。看看這個相關的討論[GAE上的性能howtos](http://stackoverflow.com/questions/9941691/django-on-googleappengine-performance-howto)。 – 2012-04-03 15:41:53

1

當添加這app.yaml

handlers: 
- url: /static/admin 
    static_dir: static/admin 
    expiration: '0' 

我能夠服務於CSS文件:

添加這settings.py

BASE_DIR = os.path.abspath(os.path.dirname(__file__)) + os.sep 
STATIC_ROOT = BASE_DIR + 'static' 

,然後運行

python manage.py collectstatic 

管理媒體文件在本地以及在appspot.com上正確顯示。 最後一個命令將媒體文件複製到static/目錄中。所以事實上Dan Danderson建議的是以更自動的方式。

+1

不會取消其他答案的正確性,因爲我目前不使用GAE,因此無法驗證您的靈感是否正確。仍然聽起來「整潔」,即+ 1ed – 2012-12-28 13:30:59

+0

這適用於我!順便說一句我在app.yaml的處理程序部分使用「/ static」和「static /」而不是「/ static/admin」和「static/admin」。 – Donald 2018-02-03 17:06:15

1

我試過菲利普凱勒的collectstatic,但我沒有那個命令可用。

所以,這個處理程序添加到app.yaml

- url: /static/admin 
    static_dir: django/contrib/admin/static/admin 
    expiration: '0' 

然後,在settings.py,刪除ADMIN_MEDIA_PREFIX(在Django 1.4刪除),並添加:

STATIC_URL = '/static/' 

,你有工作的CSS。

+1

我不再在這個項目上工作了。仍然+1,因爲這是最近的答案。 – 2013-09-24 20:00:43

0

以下似乎對我很好。

的app.yaml

handlers: 
- url: /static 
    static_dir: staticfiles 

設置

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), 
) 

運行python manage.py collectstatic。現在在您的staticfiles admin文件夾下應該創建。