## page was renamed from GruppoAsk/Hack <> <> = Introduzione = Questa pagina contiene informazioni utili per coloro che vogliono partecipare allo sviluppo e al mantenimento del codice di Chiedi. Per poter sviluppare funzionalità è richiesta una conoscenza di Python e Django, mentre per modifiche al tema di HTML e CSS. = Scaricare una copia del sito in locale = Per poter mandare le modifiche è necessario avere un'istanza locale su cui effettuarle.<
> Su Ubuntu 12.04 LTS tutte le dipendenze sono alla giusta versione, per le release successive si consiglia l'aggiunta del [[https://launchpad.net/~ubuntu-it-ask-devel/+archive/osqa-compatibility|PPA]] contenente le versioni corrette. == Prerequisiti == Installare i seguenti pacchetti relativi a django, apache, database postgresql, subversion, bazaar, gettext: {{{ sudo apt-get install python-django python-django-south python-django-openid-auth python-django-debug-toolbar python-migrate python-html5lib python-markdown python-elementtidy python-psycopg2 python-oauth2client postgresql-9.1 apache2 libapache2-mod-wsgi subversion bzr gettext }}} == Preparare il database == Assumiamo che l'utente proprietario del database sia ''postgresql''. * Configurare correttamente i permessi di postgresql modificando il file /etc/postgresql/9.1/main/pg_hba.conf, sostituendo le ultime righe con questo: {{{ # "local" is for Unix domain socket connections only host all all 192.168.1.20 255.255.255.0 md5 # <- 192.168.1.20 ip tua macchina local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. #local replication postgres peer #host replication postgres 127.0.0.1/32 md5 #host replication postgres ::1/128 md5 }}} * Creare l'utente ''osqa'': {{{ sudo su postgres createuser osqa psql -d template1 -U postgres alter user osqa with password 'la_tua_password'; \q }}} * Creare il database ''osqa'' con proprietario ''postgres'': {{{ createdb -O osqa osqa exit }}} == Configurare apache == Assumiamo che il Virtual Host si chiami ''osqa'' e che la directory di installazione sia ''/var/www/osqa''. * Assicurarsi di avere abilitato il modulo wsgi: {{{ sudo a2enmod wsgi }}} * Copiare il seguente Virtual Host in ''/etc/apache2/sites-available/'' chiamandolo ''osqa'': {{{ WSGISocketPrefix ${APACHE_RUN_DIR} DocumentRoot /var/www/osqa/ ServerName http://localhost ServerAlias http://localhost Alias /osqa/m/ "/var/www/osqa/forum/skins/" Order allow,deny Allow from all Alias /osqa/upfiles/ "/var/www/osqa/forum/upfiles/" Order deny,allow Allow from all Alias /admin_media/ /usr/lib/python2.7/dist-packages/django/contrib/admin/media/ Order allow,deny Allow from all WSGIScriptAlias / /var/www/osqa/osqa.wsgi CustomLog ${APACHE_LOG_DIR}/osqa.access.log common ErrorLog ${APACHE_LOG_DIR}/osqa.error.log }}} * Abilitare il virtualhost e riavviare il servizio: {{{ sudo a2ensite osqa sudo service apache2 restart }}} == Installare osqa == * Scaricare il branch di Chiedi Ubuntu-it e copiarlo poi in `/var/www`: {{{ bzr branch lp:ubuntu-it-ask }}} * Rinominare la cartella `/var/www/ubuntu-it-ask` in `/var/www/osqa` (nota bene: la cartella DEVE chiamarsi per forza ''osqa''). * Copiare osqa.wsgi.dist su osqa.wsgi, quindi modificare osqa.wsgi cambiando i path: {{{ sys.path.append('/var/www') sys.path.append('/var/www/osqa') }}} * Copiare settings_local.py.dist su settings_local.py e modificare settings_local.py affinché rifletta la reale configurazione della propria macchina. A titolo di esempio: {{{ # encoding:utf-8 import os.path SITE_SRC_ROOT = os.path.dirname(__file__) LOG_FILENAME = 'django.osqa.log' #for logging import logging logging.basicConfig( filename=os.path.join(SITE_SRC_ROOT, 'log', LOG_FILENAME), level=logging.ERROR, format='%(pathname)s TIME: %(asctime)s MSG: %(filename)s:%(funcName)s:%(lineno)d %(message)s', ) #ADMINS and MANAGERS ADMINS = () MANAGERS = ADMINS DEBUG = False DEBUG_TOOLBAR_CONFIG = { 'INTERCEPT_REDIRECTS': True } TEMPLATE_DEBUG = DEBUG INTERNAL_IPS = ('127.0.0.1',) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'osqa', 'USER': 'osqa', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } CACHE_BACKEND = 'file://%s' % os.path.join(os.path.dirname(__file__),'cache').replace('\\','/') #CACHE_BACKEND = 'dummy://' SESSION_ENGINE = 'django.contrib.sessions.backends.db' # This should be equal to your domain name, plus the web application context. # This shouldn't be followed by a trailing slash. # I.e., http://www.yoursite.com or http://www.hostedsite.com/yourhostapp APP_URL = 'http://localhost' #LOCALIZATIONS TIME_ZONE = 'Europe/Rome' #OTHER SETTINGS USE_I18N = True LANGUAGE_CODE = 'it' DJANGO_VERSION = 1.1 OSQA_DEFAULT_SKIN = 'light' DISABLED_MODULES = ['books', 'recaptcha', 'project_badges', 'mysqlfulltext'] }}} * Popolare il database (comandi da dare in /var/www/osqa): {{{ sudo python manage.py syncdb --all (dire no alla richiesta di creare un super utente) sudo python manage.py migrate forum --fake }}} * Generare le ultime traduzioni (sempre da /var/www/osqa): {{{ cp locale/it/LC_MESSAGES/it.po locale/it/LC_MESSAGES/django.po msgfmt locale/it/LC_MESSAGES/django.po -o locale/it/LC_MESSAGES/django.mo sudo python manage.py makemessages -l it }}} Nota sulle traduzioni: in realtà la traduzione più aggiornata è sempre [[http://bazaar.launchpad.net/~ubuntu-it-ask/ubuntu-it-ask/stable/view/head:/locale/it/LC_MESSAGES/it.po | questa]]. Per applicarla seguire gli stessi passi. == Assegnare i permessi corretti == {{{ sudo chown -R www-data:www-data /var/www/osqa sudo chmod -R g+w /var/www/osqa/forum/upfiles sudo chmod -R g+w /var/www/osqa/log }}} == Prova == Riavviare apache e postgres, per sicurezza per l'ultima volta e andare su http://localhost. Dovrebbe funzionare. == Un passo in più == Non indispensabile, ma se si volesse utilizzare la medesima configurazione in uso su chiedi.ubuntu-it.org: * Fare un backup della tabella di configurazione: {{{ pg_dump osqa --clean -O -t forum_keyvalue -f mia_tabella.sql -U postgres -W }}} * Importare il database in questo modo: {{{ psql -U osqa osqa -W < 00-forum_keyvalue.sql }}} * Sync db: {{{ sudo python /var/www/osqa/manage.py syncdb }}} = Utilizzare gli scripts = Abbiamo preparato una serie di scripts volti a semplificare lo sviluppo.<
> Essi sono stati creati da PietroAlbini, pacchettizzati da AndreaColangelo e rilasciati sotto licenza GNU-GPL v3. * '''Codice''': [[https://code.launchpad.net/~ubuntu-it-ask-devel/+junk/osqa-scripts]] * '''PPA''': [[https://launchpad.net/~ubuntu-it-ask-devel/+archive/osqa-compatibility]] == Installare gli scripts == {{{ sudo add-apt-repository ppa:ubuntu-it-ask-devel/osqa-compatibility sudo apt-get update sudo apt-get install osqa-scripts }}} == Configurazione iniziale == Per prima cosa modificare il file `/etc/osqa-scripts/osqa-scripts.cfg` affinché rifletta la propria configurazione.<
> Dopo copiare i files `osqa.wsgi` e `settings_local.py` in `/etc/osqa-scripts/`. == Utilizzo == Gli scripts richiedono i permessi di root, ma '''NON''' vanno utilizzati con `sudo` per via di problemi con bazaar.<
> Gli scripts eseguono automaticametne sudo dove necessario. === Scaricare un branch === {{{ osqa apply-branch [proprietario] [nome_branch] }}} Esso scarica il branch dal progetto launchpad [[https://launchpad.net/ubuntu-it-ask|ubuntu-it-ask]] (se non configurato diversamente), sostituisce i files mantenendo i files di configurazione come symlink a quelli presenti in `/etc/osqa-scripts`, ricompila la lingua e applica i permessi corretti. In caso che il proprietario o il nome del branch non vengano passati verranno utilizzati i valori di default presenti nella configurazione. === Resettare il database === {{{ osqa reset-db }}} Esso ricrea e ripopola con i dati di default il database di OSQA.<
> '''Esso cancella tutti i dati presenti, quindi prestare attenzione''' = Iniziare a sviluppare = Benissimo, ora si può iniziare a sviluppare. == Modificare il tema == Il tema di Chiedi è ben fatto, ma può essere migliorato. I files del tema si trovano in `forum/skins/light`. === Modifica dello stile === Lo stile è presente in `forum/skins/light/media`, nelle sottocartelle `styles` e `images`.<
> Effettuare le modifiche ai files e controllare che non ci siano effetti inaspettati nelle pagine. === Modifica del contenuto delle pagine === Per prima cosa controllare in che file è posizionato il contenuto della pagina scelta guardando in `forum/skins/default/templates`. Poi guardare se il file è presente in `forum/skins/light/templates` e, in caso macasse, copiarlo. Effettuare poi le modifiche nella copia del file presente in `forum/skins/light/templates`. '''Mai modificare i files in `forum/skins/default/templates`'''. == Modifica del funzionamento della piattaforma == Per modificare il funzionamento della piattaforma agire sui files presenti in `forum` e `forum_modules`. = Pubblica le tue modifiche = == Preparazione del codice == Prima di caricare le modifiche è bene, oltre a testare i cambiamenti, pulire il codice.<
> Infatti non bisogna lasciare alcuna traccia di test o codici inutili. È bene infatti scaricare l'ultima revisione del nostro [[https://code.launchpad.net/ubuntu-it-ask|repository]] e riapplicaci le modifiche, in modo da lasciare meno tracce possibili. == Caricamento su launchpad == In caso che la modifica risolve un bug utilizzare i seguenti comandi sostituendo ####### con l'id del bug: {{{ bzr commit --fixes lp:####### -m 'Descrivi le modifiche' bzr push lp:~tuonome/ubuntu-it-ask/fix-lp####### }}} Altrimenti: {{{ bzr commit -m 'Descrivi le tue modifiche' bzr push lp:~tuonome/ubuntu-it-ask/nome_repo }}} == Presentazione delle modifiche == Fai una merge request via launchpad sui branch `lp:~ubuntu-it-ask/ubuntu-it-ask/stable` e `lp:~ubuntu-it-ask/ubuntu-ask/development`, poi scrivi in [[http://liste.ubuntu-it.org/cgi-bin/mailman/listinfo/devel-ask|mailing list]] presentando dettagliatamente le tue modifiche. Uno o più amministratori testeranno le modifiche sulla loro istanza locale e poi comunicheranno il risultato dei test. In caso positivo verranno caricate le modifiche sul server di test del gruppo, e dopo altri test sul server di Chiedi. = Per chi vuole studiare = * Non conosci bazaar? * [[Programmazione/Bazaar|Guida su bazaar]] * [[http://wiki.bazaar.canonical.com/Scenarios|Casi d'uso]] * [[http://doc.bazaar.canonical.com/bzr.dev/en/|Guida ufficiale completa]] * Non conosci Django? [[https://docs.djangoproject.com/en/1.4/|Documentazione di Django]] * Non conosci OSQA? * [[http://meta.osqa.net/|Meta ufficiale]] * [[http://wiki.osqa.net|Wiki]] ---- CategoryComunita