[ Nebojsa Marinkov @ 27.06.2014. 14:46 ] @
Pozdrav

Radim jedan vrlo jednostavan sajt u django CMS i ideja je bila da za front page napravim plugin koji prikazivati specifičan layout. Ne može jednostavnije, nema interakcije sa bazom nikakvg podešavanja, plagin treba samo da uzme svoj template file i da ga prikaže u content placeholderu.

Dakle napravim django app imenom frontpage i unutra stavim fajl cms_plugins.py koji kaže

Code:

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from cms.models.pluginmodel import CMSPlugin
from django.utils.translation import ugettext_lazy as _

class FrontpagePlugin(CMSPluginBase):
    model = CMSPlugin
    name = _("Front Page")
    render_template = "front.html"
    
    def render(self, context, instance, placeholder):
        context['instance'] = instance
        return context
    
plugin_pool.register_plugin(FrontpagePlugin)


i ništa, nema ga, ne postoji. Mogu da ga importujem preko 'python manage.py shell'

>>> from django.utils.importlib import import_module
>>> import_module("frontpage.cms_plugins")
<module 'frontpage.cms_plugins' from '/site_backend/sporthuus_env/frontpage/cms_plugins.py'>

ali i dalje ga nema nigde na samom sajtu

Onda probam da vidim da li javlja neku gresku ako izvršim python frontpage/cms_plugins.py i dobijam sledeće.

Code:
django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.


Ljudi moji čemu sve to? Ok sada se radi o nekom osnovnom setovanju djanga. Gde? Ko? probao sam da ubacim

Code:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'sportcache',
    }
}


Nakon što sam kreirao tu tabelu u bazi ali ništa se ne menja. Dalje ne znam kuda da tražim svaka google pretraga me baca na jedne te iste stranice.
Inače prilično sam nov u svemu ovome, do sada sam radio PHP gde je sve lepo lako jasno jednostavno.

Sve se dešava u virtualenv okruženju, na ubuntu serveru. Ako neko ima ideju dajte bilo šta, samo da mrdne.
[ del-boy @ 27.06.2014. 23:05 ] @
Da li si dodao tu novu aplikaciju u INSTALLED_APPS u settings.py?

Ne znam kakav ti je layout foldera, ali proveri i da li ti je lokacija gde se nalazi aplikacija u sys.path, ako nije dodaj je.

Ovu grešku što prijavljuje kad pokušaš da izvršiš fajl samo kaže da nije podešen django environment i da ne zna da pročita settings. Ti ga nigde ne tražiš, ali nasleđuješ i koristiš neki kod koji verovatno koristi CACHES promenljivu iz settingsa. To što si je dodao, ne znači mnogo kad ti nije podešena evironment varijabla DJANGO_SETTINGS_MODULE. Ovo bude automatski podešeno kada koristiš manage.py za pokretanje.

Ne znam šta koristiš (ne prepoznajem ovo što importuješ), ali ovo gore što sam napisao je generalna priča, možda ima nešto specifično za CMS sa kojim radiš.
[ Nebojsa Marinkov @ 01.07.2014. 09:19 ] @
Bojane hvala na odgovoru,

dodao sam aplikaciju u INSTALLED_APPS kao frontpage pa posle i kao sporthuus.frontpage.

Prebacio sam komplet folder u iz ENV foldera u site folder dakle u sporthuus folder. Sada je striktura ovakva:

sporthuus_env
→ ...
→ frontpage_bak (ovde je originalno stajala aplikacija)
→ sporthuus
→ → frontpage
→ → → __init__.py
→ → → admin.py
→ → → cms_plugins.py
→ → → models.py
→ → → tests.py
→ → → views.py
→ → ....
→ manage.py

U manage.py sam ubacio kod koji uključuje sve potencijalno neophodne putanje i to sve ukupno izgleda ovako.

Code:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":

    paths = ['/site_backend/sporthuus_env', '/site_backend/sporthuus_env/sporthuus', '/site_backend/sporthuus_env/sporthuus/frontpage']

    for path in paths:
        if path not in sys.path:
            sys.path.append(path)

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sporthuus.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)


i kada iz manage.py shell iščitam sys.path sve putanje su tu sto ce biti

Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import sys
>>> for p in sys.path:
... print p
...
/site_backend/sporthuus_env
/site_backend/sporthuus_env/lib/python2.7
/site_backend/sporthuus_env/lib/python2.7/plat-x86_64-linux-gnu
/site_backend/sporthuus_env/lib/python2.7/lib-tk
/site_backend/sporthuus_env/lib/python2.7/lib-old
/site_backend/sporthuus_env/lib/python2.7/lib-dynload
/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/site_backend/sporthuus_env/local/lib/python2.7/site-packages
/site_backend/sporthuus_env/sporthuus
/site_backend/sporthuus_env/sporthuus/frontpage
>>>

Onda kada ponovo probam da pokrenem cms_plugins.py sa nove lokacije dobijam istu gresku o keševima i naravno plagin nije registrovan.

a kada probam
>>> from sporthuus import frontpage

to prodje bez greške

Ništa idemo dalje pa ćemo javiti konačno rešenje ako ga bude


Edit:

Upravo sam otkrio da ako iz konzole probam da pozovem cms_plugins.py od bilo kog drugog ugradjenog plugina dobijam istu grešku.

python djangocms_picture/cms_plugins.py

django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured.
You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure()
before accessing settings.

Istovremeno ovi plaginovi se pojavljuju na sajtu i savršeno funkcionišu. Baš sam picture plugin isprobaoi radi, a ovaj moj se i dalje ne pojavljuje u listu. Sada sam ga prebacio u folder lib/python2.7/site-packeges gde se nalaze i svi ostali native moduli. Vratio sam u settings.py u INSTALLED_APPS da stoji 'frontpage'. Evo nema ga i dalje u spisku. Ne znam da li treba nešto da resetujem da bi mi se učitala nova konfiguracija.


[Ovu poruku je menjao Nebojsa Marinkov dana 01.07.2014. u 13:13 GMT+1]
[ Nebojsa Marinkov @ 01.07.2014. 13:30 ] @
Ljudi rešio sam problem. Naravno bilo je nešto bezveze ne vezano za sve konfiguracije budženja workaroun-ove.

Evo u čemu je stvar. Pre nego što sam implementirao plugin uradio sam deployment sajta na nginx platformi koristeći gunicorn. Kada se napravi neka promena u setings.py mora se resetovati gunicorn ne samo nginx.

Dakle nadje se i ubije gunicorn proces i nakon toga se ponovo pokrene pomoću

$ gunicorn sporthuus.wsgi:application --bind 127.0.0.1:8001

sporthuus je naziv projekta i treba ga zameniti nazivom vašeg django projekta.

pod uslovom da je sve ostalo oko deployment-a već setovano

Kad ono Front page se konačno pojavio u spisku. Radost!