2012-07-21 6 views
14

मुझे हेरोकू पर कई रूट-स्तरीय स्थैतिक फाइलों की सेवा करने की आवश्यकता है (उदाहरण के लिए, domain.com/favicon.ico)। यहाँ फ़ाइलों की सूची है के रूप में यह वर्तमान में खड़ा है:Django के साथ Heroku पर रूट-स्तरीय स्थैतिक फ़ाइलों की सेवा?

favicon.ico 
crossdomain.xml 
sitemap.xml 
robots.txt 
humans.txt 
apple-touch-icon-57x57-precomposed.png 
apple-touch-icon-57x57.png 
apple-touch-icon-72x72-precomposed.png 
apple-touch-icon-72x72.png 
apple-touch-icon-114x114-precomposed.png 
apple-touch-icon-114x114.png 
apple-touch-icon-precomposed.png 
apple-touch-icon.png 

मैं उच्च और निम्न खोज की है और स्थिर फ़ाइलों के एक बड़े सेट की सेवा के लिए एक मानक तरीका नहीं मिल रहा। जहां भी मैं उन्हें होस्ट करता हूं (हेरोकू पर संग्रहित या अमेज़ॅन एस 3 के साथ), मेरी urls.py में 14 फ़ाइलों को स्पष्ट रूप से परिभाषित और पुनर्निर्देशित करना गलत लगता है।

+0

तो क्या आप मुख्य समस्या यह है: यह संसाधनों के लिए Heroku/एस 3 के लिए आप नहीं कर सकते लोड फाइल या सही url सेट? – nk9

+0

@ बी 1-सही यूआरएल सेट करना। – knite

+0

इस मैनुअल की कोशिश [blog1] (http://matthewphiong.com/managing-django-static-files-on-heroku) [blog2] (http://www.iknuth.com/2011/10/deploying-a- Django-ऐप करने वाली Heroku-साथ-आसान स्थैतिक-फ़ाइलें-ऑन-S3 /)। सावधान रहें मुझे लगता है कि यह django 1.3 के लिए है। अगर यह आपको 'settings.py' पोस्ट करने में मदद नहीं करता है। – nk9

उत्तर

1

मैं किसी भी यूआरएल config फ़ाइलें नहीं मिला, तो मुझे लगता है Heroku यह सेवा प्रदान नहीं।

और official docs के अनुसार आप

संपादित बाहरी सेवाओं पर अपने डेटा को बचाने की जरूरत है:

तो Heroku डॉक्स के अनुसार केवल 301 S3 पर रीडायरेक्ट आप कर सकते हैं। या यहाँ तक कि टेम्पलेट्स में सभी मीडिया (ico, आइकन, png और एक अन्य चित्र) फ़ाइलों के लिए बेहतर S3 सेवाओं के लिए और रोबोट और crossdomain.xml urls.py में सेट 301 S3 पर रीडायरेक्ट के लिए निरपेक्ष पथ निर्धारित किया है। sitemap.xml के लिए बेहतर native solutions

यह सही विकास में कोड रीडायरेक्ट का उपयोग करने के लिए गलत नहीं है का उपयोग करें।

+0

मेरा प्रश्न बताता है कि मैं बाहरी सेवा (अमेज़ॅन एस 3) का उपयोग कर रहा हूं। मैं फ़ाइलों की सेवा करने के लिए सबसे अच्छा तरीका पूछ रहा हूं (उदाहरण के लिए, urls.py)। – knite

+0

मैं बस अपना जवाब संपादित करें। क्या आपको कोड या अमूर्त समाधान भी ठीक है? ;) – nk9

4

यह मेरे वर्तमान समाधान है। प्रतिक्रिया की सराहना की।

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
from settings import STATIC_URL, ASSETS, DEBUG, AWS_STORAGE 

#ASSETS is a tuple: ('favicon.ico, 'robots.txt', ...)  
urls = [('^%s$' % f, 'redirect_to', {'url': STATIC_URL + f}) for f in ASSETS] 
urlpatterns += patterns('django.views.generic.simple', *urls) 

#Serve static files from runserver if in dev mode with S3 off. 
if DEBUG and not AWS_STORAGE: 
    urlpatterns += staticfiles_urlpatterns() 
+0

यह देखते हुए कि मेरे पास शायद कई रूट संपत्ति नहीं होगी, मुझे लगता है कि यह समाधान पर्याप्त है। –

1

इस के बावजूद एक पुराने सवाल किया जा रहा है, मैं अभी भी समस्या है। मुझे वर्तमान समाधान में किसी सूची से यूआरएल उत्पन्न करने का तरीका पसंद है, लेकिन मुझे विश्वास नहीं था कि यह सबसे अच्छा था।

हालांकि अनुसंधान के एक बिट के बाद, मैं realfavicongenerator.net एक बहुत ही उपयोगी संसाधन है जो आप के लिए सभी आवश्यक favicons फ़ाइलें उत्पन्न किया जा रहा है मिल गया है और मैं एक सहयोगी जो प्रस्तावित समाधान का समर्थन करने लगता है द्वारा this post भेजा गया था, तो सबसे हाल Django संस्करण के साथ ।

सब से ऊपर, मेरे समाधान के आधार पर फ़ाइलों की एक सूची के रूप में रोबोट पाठ और एक ROOT_ASSETS शब्दकोश के लिए देशी साइटमैप ढांचे, django-robots उपयोग कर रहा है, कुंजी के रूप में फाइल उपसर्ग, और मूल्यों के साथ, उदाहरण के लिए:

ROOT_ASSETS = { 
    "images/favicons/": [ 
     "apple-touch-icon-114x114.png", 
     "apple-touch-icon-120x120.png", 
     "apple-touch-icon-144x144.png", 
     "apple-touch-icon-152x152.png", 
     "apple-touch-icon-180x180.png", 
     "apple-touch-icon-57x57.png", 
     "apple-touch-icon-60x60.png", 
     "apple-touch-icon-72x72.png", 
     "apple-touch-icon-76x76.png", 
     "apple-touch-icon-precomposed.png", 
     "favicon.ico", 
    ] 
} 

from django.conf.urls import patterns, url, include 
from django.contrib.staticfiles.storage import staticfiles_storage 

root_assets_urls = [] 
for prefix, files in ROOT_ASSETS.iteritems(): 
    for f in files: 
     asset_url = staticfiles_storage.url("{prefix}{file}".format(prefix=prefix, file=f)) 
     root_assets_urls.append(
      url(r'^{0}$'.format(f), RedirectView.as_view(url=asset_url)) 
     ) 
root_assets = patterns('', *root_assets_urls) 

urlpatterns = patterns(
    '', 
    url(r'^', include(root_assets)), 
    [...] 
) 

मैं भी एचटीएमएल मेरे मालिक टेम्पलेट के सिर में realfavicongenerator.net द्वारा उत्पन्न शामिल कर रहा हूँ:

तो मैं के साथ मेरी यूआरएल उत्पन्न करते हैं।

संबंधित मुद्दे