2013-10-16 3 views
5

मैंने आधिकारिक Heroku docs on Django and Static Assets का पालन किया है; मैं dj-static स्थापित किया है और मेरे requirements.txt फ़ाइल में जोड़ा है, ठीक से मेरी settings.py फ़ाइल में सभी चर कॉन्फ़िगर:जब मैं अपने Django ऐप को हरोकू में तैनात करता हूं तो संग्रहित स्वचालित रूप से क्यों नहीं चल रहा है?

STATIC_ROOT = os.path.join(CONFIG_ROOT, 'served/static/')      
STATIC_URL = '/static/'               

STATICFILES_DIRS = (               
    os.path.join(CONFIG_ROOT, 'static'),           
) 

और यही मेरी wsgi.py की तरह लग रहा है:

import os                  
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_django_project.settings")                 

from django.core.wsgi import get_wsgi_application 
from dj_static import Cling 
application = Cling(get_wsgi_application()) 

Procfile की सामग्री :

web: gunicorn --bind 0.0.0.0:$PORT my_django_project.wsgi:application 

दस्तावेज़ों में, यह कहता है कि "संग्रहित स्वचालित रूप से चलाया जाता है जब यह ठीक से कॉन्फ़िगर किया गया है। " लेकिन जब मैं अपनी साइट पर नेविगेट करता हूं तो स्पष्ट रूप से कोई सीएसएस नहीं होता है।

मैंने heroku run का उपयोग करके debugging को आजमाया है, लेकिन यह केवल स्थिर फ़ाइलों की अपेक्षा करता है।

मैंने देखा है कि जब मैं अपने Procfile में collectstatic आदेश है, यानी

web: python my_django_project/manage.py collectstatic --noinput ; gunicorn -b 0.0.0.0:$PORT my_django_project.wsgi:application 

... अपेक्षा के अनुरूप काम करता है शामिल है, इसलिए और स्थैतिक फ़ाइलें सेवा कर रहे हैं।

हालांकि जब मैं heroku run bash चलाता हूं और उस निर्देशिका के अंदर देखता हूं जो STATIC_ROOT इंगित कर रहा है, वहां कुछ भी नहीं है! वास्तव में, संपूर्ण served/ निर्देशिका गुम है, और फिर भी, स्थिर फ़ाइलों को अभी भी परोसा जा रहा है!

मैं अभी भी जानना चाहता हूं कि क्यों नहीं collectstatic स्वचालित रूप से चल रहा है - जैसे दस्तावेज़ों में उल्लिखित - जब मैं अपने Django ऐप को हरोकू में तैनात करता हूं।

+0

चेक इस http://stackoverflow.com/a/15858757/263989 – fasouto

+0

@fasouto यह कोशिश की; कोई त्रुटि नहीं मिली मुझे अंत में 'प्रतिलिपि प्रतिलिपि' ... '' और '284 स्थिर फाइलों की प्रतिलिपि' का एक गुच्छा मिला। – 3cheesewheel

उत्तर

4

ऐसा लगता है कि आप Heroku/उत्पादन के लिए एक विशिष्ट सेटिंग्स मॉड्यूल का उपयोग कर रहे हैं। इसके अलावा, आपने इस सेटिंग मॉड्यूल को इंगित करने के लिए पर्यावरण परिवर्तनीय DJANGO_SETTINGS_MODULE सेट किया है (और इस तरह, जब ऐप चलता है, Django उस का उपयोग करना जानता है और नहीं, कहें, आपका डिफ़ॉल्ट/विकास एक)। अंत में, आपने शायद हेरोकू/उत्पादन सेटिंग्स मॉड्यूल (शायद, STATIC_ROOT) में स्थिर संपत्ति सेटिंग्स कॉन्फ़िगर की है।

ठीक है, तो यदि यह सब सही है, तो यहां समस्या है: heroku पर्यावरण चर केवल सेवा-समय पर सेट हैं, संकलन समय पर नहीं। यह महत्वपूर्ण है क्योंकि collectstatic हेरोकू के लिए एक संकलन-समय ऑपरेशन है। (जब आप धक्का देते हैं तो हरोकू 2 चरणों के माध्यम से जाता है: 1) संकलन, जिसमें एप्लिकेशन को सेट करना शामिल है (collectstatic, syncdb, आदि) 2) आपके आवेदन के सामान्य संचालन की सेवा करना)।

तो, अनिवार्य रूप से, आपने सब कुछ सही तरीके से किया है, लेकिन हेरोोकू ने collectstatic पर एक अलग सेटिंग्स मॉड्यूल के आपके विनिर्देश सहित आपके पर्यावरण चर का खुलासा नहीं किया है।

अपने वातावरण चर संकलन समय पर सेट है, इस तरह Heroku के user-env-compile प्रयोगशाला सुविधा को सक्षम करने के लिए:

heroku labs:enable user-env-compile 

मुझे लगता है, यह डिफ़ॉल्ट रूप से करने के लिए एक मूर्खतापूर्ण बात है और सुनवाई क्यों Heroku में रुचि होगी सोचा था कि यह एक अच्छा विचार था।

+0

FYI करें यह अब एक मान्य हल है :(http://stackoverflow.com/questions/22904959/failing-to-enable-user-env-compile-on-heroku – andy

1

क्या आपने user_env_compile सेटिंग को अपने heroku कॉन्फ़िगरेशन में जोड़ने का प्रयास किया है?

heroku labs:enable user-env-compile

कि सक्षम होने के साथ जब भी आप स्वचालित रूप से Heroku को तैनात collectstatic चलाने की जानी चाहिए।

1

मैं heroku python buildpack का उपयोग डोक्कू के साथ कर रहा हूं, और संग्रहित नहीं किया जा रहा था क्योंकि इसमें निष्पादन निष्पादित नहीं था। उन्होंने तय किया कि recent commit (13 दिसंबर, 2013) में, इसलिए इसे अभी काम करना चाहिए।

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

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