Skip to content
Extraits de code Groupes Projets
avatar de l'utilisateur
echarp rédigé
d7026b50
Historique

Agenda du libre

Calendrier d'évènements, proposés par tout un chacun mais nécessitant une modération avant d'être affichés.

Cette application est disponible sous la license GNU AGPL version 3 ou supérieure.

Elle est hébergée ici: https://git.framasoft.org/agenda-libre/agenda-libre-ruby et utilisable notamment ici: https://www.agendadulibre.org

La technologie repose sur "Ruby on Rails", version 5.2.

Il existe d'autres projets équivalents https://git.framasoft.org/agenda-libre/agenda-libre-php https://bitbucket.org/mlhamel/agendadulibre

Prérequis

Exemple d'installation pour Debian:

~ $ apt-get install sqlite3 libsqlite3-dev build-essential git libltdl-dev
~ $ apt-get install bundler

Dans le cas d'une installation en mode production, dans un environnement comme Debian stable Jessie, il faut ajouter les dépôt jessie-updates et jessie-backports pour obtenir une version récente de bundler.

Pour le développement, il faut de plus installer les paquets zlib1g-dev et libsqlite3-dev ou libmysqlclient-dev.

Code source

Pour installer l'Agenda du libre, vous devrez récupérer le code source à l'aide de "git", puis installer les dépendances avec "bundler" (bundler est packagé dans Debian, mais peut aussi s'installer depuis http://bundler.io, une version récente de préférence).

Par exemple:

~ $ git clone git@git.framasoft.org:agenda-libre/agenda-libre-ruby.git
~ $ cd agenda-du-libre
~ $ bundle install --path vendor/bundle --without production

Dans le cas d'une installation en mode production, on utilisera plutôt `--without test developement`.

Base de données

La base de données peut être "sqlite3", "postgresql" ou "mysql2". Par défaut sqlite3 est configurée, mais vous pouvez la modifier dans le fichier `config/database.yml`.

/!\ En pratique, en 2017-03, PostgreSQL server ne parvenait pas à interprêter le fichier schema.rb généré automatiquement depuis une base fonctionnelle.

Dans le cas d'une installation MySQL

Il convient d'installer d'abord MySQL server sur sa machine :

~ # apt install mysql-server

Il faut alors choisir un mot de passe pour l'utilisateur root, avec lequel on créera une nouvelle base pour le projet, ainsi qu'un utilisateur ayant les droits sur cette base :

~ # mysql -u root -p
mysql> CREATE DATABASE '<nouvelle_instance>';
mysql> CREATE USER '<nouveau_user>' IDENTIFIED BY '<mot-de-passe>';
mysql> GRANT ALL ON <nouvelle_instance>.* TO '<nouveau_user>'@'localhost';

---

Mettez en place le schéma comme ceci:

~ $ bundle exec rake db:setup [RAILS_ENV="production"]

Lancement

En développement

Puis lancez rails (avec tests et vérifications de sécurité):

~ $ bundle exec guard

Vous pouvez finalement accéder à l'agenda dans un navigateur à l'URL suivante: http://localhost:3000

Votre premier modérateur admin est identifié par "admin@example.com", son mot de passe étant "password".

  • Astuce:* L'application va essayer d'envoyer des emails à certaines occasions, par exemple lors de la soumission d'un événement, et va crasher si elle ne trouve pas de serveur SMTP à `localhost:25`. Un moyen simple de fair tourner un serveur SMTP à cette adresse est d'utiliser Python: `sudo python3 -m smtpd -c DebuggingServer -n localhost:25`

En production

~ # apt install libapache2-mod-passenger
~ # vi /etc/apache2/sites-available/nouvelle_instance.conf
<VirtualHost *:80>
  ServerName DOMAINE.NAME
  DocumentRoot /srv/<nouvelle_instance>/public
  SetEnv DATABASE_URL mysql2://<nouveau_user>@localhost/<nouvelle_instance>
  SetEnv SECRET_KEY_BASE <SECRET>
  SetEnv RAILS_ENV production
  RailsEnv production
  <Directory /srv/<nouvelle_instance>/public>
    Require all granted
  </Directory>
</VirtualHost>
~ # a2ensite /etc/apache2/sites-available/nouvelle_instance.conf
~ # /etc/init.d/apache2 reload

Des variables d'environnement sont prévues pour surcharger l'adresse mail d'envoi, ainsi que le logo.

Exemples:

	export ADL_LOGO=https://agendadulibre.qc.ca/assets/logo-adlq-e0f0cac6a29fbf64b8e0f7c957cda37fd2678ddd95fab8afa396482b70146174.png
	export ADL_MAIL=test@exemple.com

(d'autres peuvent être rajoutées si des surcharges sont souhaitées)

Aide mémoire

Commande à utiliser en console rails pour créer plusieurs événements:

w = 0
Event.create(elt.attributes.merge( { start_time: elt.start_time+w.week, end_time: elt.end_time+w.week } )).start_time; w = 1

Commande à utiliser pour précompiler les assets avant leur déploiement dans un environnement de production

bundle exec rake assets:precompile RAILS_ENV=assets

Mise à jour

Pour mettre à jour l'agenda du libre, il faut d'abord aller chercher la version master la plus récente sur le git upstream (https://git.framasoft.org/agenda-libre/agenda-libre-ruby). Une fois cela fait, il faut y ré-appliquer les changements qui auraient été effectués pour l'environnement donné, quelques conflits sont à prévoir. Le plus courant:

db/schema.rb: Ignorer les conflits. Prendre la version courante. Ce fichier est mis à jour à chaque migration et représente
l'état actuel de la base de données sur le serveur courant. Il est recommandé de versioner de fichier, mais à moins d'avoir
exactement le même type de base de données que les développeurs upstream, il va créer des conflits. Seule la dernière version
du fichier peut être conservée sur la branche de travail.

Lors des mises à jour de l'agenda du libre à une version plus récente, les commandes suivantes sont nécessaires:

~ $ bundle install --path vendor/bundle --without production
~ $ bundle exec rake db:migrate

Puis redémarrer avec:

~ $ bundle exec rails s

Discussions

https://kiwiirc.com/client/irc.freenode.net/agendadulibre

                         °           °           °
                       \ | /       \ | /       \ | /
                         |           |           |
                        ___         ___         ___
                      \     /     \     /     \     /
                         .         \_|_/         .
                                  \  |  /