2012-05-30 11 views
16

मैं उसकेोकू में नया हूं और मैंने सीएसएस के बिना एक साधारण django ऐप की कोशिश की।Django heroku static dir

लेकिन मैं सिर्फ अपनी ऐप्लिकेशन में एक सीएसएस फ़ाइल जोड़ा गया है और जब मैं ऐसा करते हैं:

git push heroku master 

स्थिर फ़ाइल संग्रह में विफल रहता है:

:

[...] 
-----> Collecting static files 
Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
    utility.execute() 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute 
    output = self.handle(*args, **options) 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle 
    return self.handle_noargs(**options) 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 163, in handle_noargs 
    collected = self.collect() 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 104, in collect 
    for path, storage in finder.list(self.ignore_patterns): 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/contrib/staticfiles/finders.py", line 105, in list 
    for path in utils.get_files(storage, ignore_patterns): 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/contrib/staticfiles/utils.py", line 25, in get_files 
    directories, files = storage.listdir(location) 
    File "/tmp/build_2unndirli15s7/.heroku/venv/lib/python2.7/site-packages/django/core/files/storage.py", line 235, in listdir 
    for entry in os.listdir(path): 
OSError: [Errno 2] No such file or directory: '/home/kevin/web/django/appheroku/blogapp/static' 
!  Heroku push rejected, failed to compile Python/django app 

To [email protected]:[...] 
! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to '[email protected]:[...]' 

यहाँ मेरी settings.py है

[...] 
STATIC_ROOT = '/home/kevin/web/django/appheroku/staticfiles' 

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    '/home/kevin/web/django/appheroku/blogapp/static', 
) 
[...] 

urls.py:

[...] 
if settings.DEBUG: 
    urlpatterns += staticfiles_urlpatterns() 

Procfile:

web: python appheroku/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT appheroku/monblog/settings.py 

ऐसा लगता है यहां तक ​​कि '/ घर/केविन/वेब/Django/appheroku/blogapp/स्थिर' निर्देशिका मौजूद है, यह पता नहीं है और मैं बाहर क्यों समझ नहीं सकता। :(

कृपया मेरी मदद करो ^^

संपादित करें:

अब मेरी settings.py इस तरह दिखता है:

import os 
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 
PROJECT_DIR = os.path.join(PROJECT_ROOT,'../blogapp') 
[...] 
STATIC_ROOT = os.path.join(PROJECT_ROOT,'staticfiles/') 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR,'static/'), 
) 
[...] 

और अब स्थिर फ़ाइल संग्रह कदम अच्छी तरह से काम करने लगता है:

-----> Collecting static files 
     74 static files copied. 

एक और समस्या थी: मेरी procfile में, 'एफेरोक u/manage.py ',' bin/gunicorn_django 'और' appheroku/monblog/settings.py 'नहीं मिला। मैं इसे ठीक किया गया और अब मेरी procfile इस तरह दिखता है:

web: python manage.py collectstatic --noinput; gunicorn_django --workers=4 --bind=0.0.0.0:$PORT monblog.settings 

एप्लिकेशन अब और क्रैश नहीं होता, लेकिन अभी भी कोई सीएसएस है। यहाँ लॉग है:

'2012-05-31T17:35:16+00:00 heroku[router]: GET xxxx-xxxx-number.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=85ms status=200 bytes=1054 
2012-05-31T17:35:17+00:00 heroku[router]: GET xxxx-xxxx-number.herokuapp.com/static/css/style.css dyno=web.1 queue=0 wait=0ms service=5ms status=404 bytes=2088 
2012-05-31T17:35:17+00:00 heroku[router]: GET xxxx-xxxx-number.herokuapp.com/static/js/jquery-1.7.2.min.js dyno=web.1 queue=0 wait=0ms service=5ms status=404 bytes=2115' 

EDIT3:

हाँ! यह ^^ काम करता है समस्या मेरी urls.py में थी। मैं ने लिखा है:

[...] 
if not settings.DEBUG: 
    urlpatterns += staticfiles_urlpatterns() 
बजाय

[...] 
if settings.DEBUG: 
    urlpatterns += staticfiles_urlpatterns() 

त्रुटि नहीं था मेरा संदेश में .. हाँ, यह वास्तव में मुश्किल के लिए मुझे मदद करने के लिए किया गया था। (क्षमा करें) मुझे बहुत बेवकूफ लगता है ^^ '

उत्तर

12

समस्या यह है कि आप STATIC_ROOT के लिए उपयोग कर रहे पूर्ण पथ को Heroku सर्वर में नहीं मिला है।

इसे हल करने के लिए, निम्न दृष्टिकोण पर विचार करें।

अपने settings.py में:

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 
STATIC_ROOT= os.path.join(PROJECT_DIR,'staticfiles/') 
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT,'static/'), 
) 
+0

अब मैं इस संपादन का उपयोग कुछ संशोधन के साथ करता हूं जैसा कि मेरे संपादन में बताया गया है। (क्योंकि मेरा स्थिर डीआईआर ('स्थिर /') मेरे ऐप डीआईआर ('ब्लॉगएप /') के अंदर है)। यह मेरी समस्या का समाधान करता है (अब भी मैं एक और के साथ हूं-_-) – heathen90

+0

क्या इस सेटिंग फ़ाइल की मूल निर्देशिका में 'blogapp/'है? ऐसा लगता है कि 'ब्लॉगएप', सेटिंग फ़ाइल के समान निर्देशिका में है जिसका अर्थ है कि आपको '../ blogapp' के बजाय 'blogapp /' में शामिल होना चाहिए। –

+0

एपहेरोकू/मोनब्लॉग/निर्देशिका, ब्लॉगएप/निर्देशिका और staticfiles निर्देशिका शामिल है। Blogapp/निर्देशिका में models.py फ़ाइल, scen.py फ़ाइल, admin.py, .. (आदि) और स्थिर/dir शामिल हैं। Monblog/निर्देशिका में सेटिंग्स.py, urls.py, आदि शामिल हैं ... – heathen90

3

आप अपने रास्ते पर हैं। क्या हो रहा है कि हेरोोक आपकी STATICFILES_DIRS सेटिंग (/ home/केविन/वेब/django/appheroku/blogapp/static) का उपयोग करने की कोशिश कर रहा है जो आपकी मशीन पर स्थानीय रूप से मौजूद है लेकिन हेरोोक सर्वर पर मौजूद नहीं होगा।

एक सरल समाधान staticfiles_dir चर से उस लाइन को हटाने के लिए ताकि आप है:

STATICFILES_DIRS =() 

फिर अपने डिफ़ॉल्ट STATICFILES_FINDERS में शुरू होगा और आप दोनों स्थानीय और साथ ही अपने अनुप्रयोग चलाने के लिए जाने के लिए अच्छा होना चाहिए Heroku पर तैनात

+0

धन्यवाद, अब मैं समझता हूं। आपका समाधान "ऐसी कोई फ़ाइल या डीआईआर" त्रुटि गायब हो जाता है, लेकिन अब इस तरह की एक त्रुटि है: "ट्रेसबैक (सबसे हालिया कॉल अंतिम): ओएसईआरर: [एरर्नो 30] केवल-पढ़ने वाली फाइल सिस्टम: '/ home/केविन' – heathen90

+0

ताकि Kay Zhu की सिफारिश के साथ नई त्रुटि तय की जानी चाहिए। कोई सीएसएस दिखाए जाने के संबंध में, जब आप सीधे एक सीएसएस पृष्ठ पर जाने का प्रयास करते हैं तो उसकेोकू लॉग में क्या त्रुटियां हैं? आप लॉग इन कर सकते हैं "heroku logs --tail "लटकती हुई चीज़ पर बेहतर संभाल पाने के लिए कमांड लाइन पर – eliotk

+0

प्राप्त करें xxx-xxx-number.herokuapp.com/static/css/style.css dyno = web.1 queue = 0 प्रतीक्षा = 0ms सेवा = 6ms स्थिति = 404 बाइट्स = 2088 – heathen90

1

किसी को भी जो मेरे जैसे में आ रहा है:

तरह @eliotk का तात्पर्य,

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 
STATIC_ROOT= os.path.join(PROJECT_DIR,'staticfiles/') 
STATICFILES_DIRS =() 

इस config आप FileNotFoundError: [Errno 2] No such file or directory: से बचना चाहते हैं है त्रुटियां या OSError: [Errno 30] Read-only file system: त्रुटियां।