Redmine (Ruby) `load_missing_constant': Object is not missing constant Issue! (ArgumentError)

Lors de l’installation conjointe de Webistrano (voir Installer Webistrano avec nginx et PostgreSQL sous Gentoo) et de Redmine (voir Installer Redmine avec PostgreSQL) sur un même serveur, Redmine m’as quelque peut surpris on me sortant cette erreur:

Après de nombreuses recherches, j’ai résolu le problème en ajoutant une petite ligne au fichier config/environnement.rb de Redmine:

Après la ligne suivante:

:)

facebooktwittergoogle_plusredditpinterestlinkedinmail

Installer Webistrano avec nginx et PostgreSQL sous Gentoo

Webistrano est une application Web développée en Ruby On Rails permettant le déploiement automatisé de vos applications, qu’elles soient Web ou non. Ainsi, via le front-end Web, vous n’aurez qu’à appuyer sur un bouton pour que Webistrano récupère vos sources depuis un dépôt (svn, git, …) et depuis un répertoire et le déploie sur votre ferme de serveurs, en lançant par exemple les différents tests que vous aurez effectués. Si une erreur apparaît, Webistrano annule tous les changements et laisse l’application fonctionnelle comme elle l’était.

Pour installer Webistrano, vous avez besoin de Ruby On Rails, d’un serveur Web et d’une base de données. Je vais utiliser nginx comme serveur Web et PostgreSQL comme base de données. Je ne vais pas vous expliquer comment installer nginx et PostgreSQL, il y a déjà de très bons articles qui vous l’expliquent.

Installation du Ruby On Rails

Pour installer Ruby On Rails sur Gentoo, rien de plus simple, installer rudy puis le gem rails :

Configuration de la base de données

Nous allons créer une nouvelle base de données pour Webistrano, ainsi qu’un nouvel utilisateur:

Téléchargement et configuration du Webistrano

On va télécharger le tarball de la dernière version de Webistrano depuis le dépôt GitHub et décompressez le à l’endroit que vous souhaitez. Ici, le chemin de Webistrano sera /home/www/webistrano/.

Ensuite, nous allons configurer Webistrano en éditant les fichiers de configuration mais avant il faut les créer à partir des modèles fournis:

Continue reading Installer Webistrano avec nginx et PostgreSQL sous Gentoo

facebooktwittergoogle_plusredditpinterestlinkedinmail

Symfony 2 et PostgreSQL: Mots réservés

Symfony 2 propose une abstraction des entities très intéressante grâce à Doctrine. Je poste ce petit article car j’ai eu une erreur tout simple:

En fait, j’ai créé un bundle nommé User, et doctrine souhaite donc créer la table User. Le problème, c’est que user est un mot clé réservé dans PostgreSQL. Par conséquent, il faut donc forcer Doctrine à escaper le nom de la table. Pour se faire, il suffit d’ajouter une annotation Table en préfixant et suffixant le nom de la table par .

Voici par exemple ma classe User avant la correction:

Il suffit donc de d'ajouter l'annotation @ORMTable en spécifiant le nom de la table entouré de . Le nouveau code est:

Ainsi, Doctrine va générer ses requêtes en ajoutant des caractères d’échappement sur le nom de la table. Ainsi, vous n’aurez plus d’erreur! :)

facebooktwittergoogle_plusredditpinterestlinkedinmail

Monitoring PostgreSQL avec Zabbix

Avant tout, il faut installer ZTC (Zabbix Template Collection), qui contient un grand nombre de templates (côté agent) Zabbix qui récupèrent des données sur différentes applications, comme Apache, Nginx, MySQL, PostgreSQL, Slony, …

Note: si vous n’avez pas installé Zabbix, vous pouvez lire le guide sur comment installer Zabbix 1.8 avec PostgreSQL sur CentOS 5.

Installation de ZTC

Vous pouvez télécharger les sources ou des paquets (pour le moment uniquement RPM) dans le gestionnaire de dépôt de ZTC. Nous allons ici installer la dernière version en date, la 10.11:

Voilà, ZTC est installé et a créé des fichiers de configuration pour les différentes applications dans le dossier /etc/zabbix-agent.d. Par défaut, tous les fichiers sont dans ce dossier. Ce que je vous propose, c’est de ne pas tous les activer sur l’agent, car cela risquerait de le charger inutilement. C’est pourquoi, on nous créer deux dossiers: enabled et available qui contiendrons les fichiers de configuration, un peu comme les configurations de modules Apache.

Nous allons également configurer l’agent Zabbix pour charger les fichiers de configuration activés: dans le fichier /etc/zabbix/zabbix_agentd.conf, ajoutez cette ligne:

Continue reading Monitoring PostgreSQL avec Zabbix

facebooktwittergoogle_plusredditpinterestlinkedinmail

Installer Zabbix 1.8.x avec PostgreSQL sur CentOS 5

Zabbix est une application de monitoring. Elle permet de surveiller votre parc de serveurs, d’applications et de sites Web. Elle se compose d’un serveur ainsi que d’agents (facultatifs, mais qui permettent de récupérer plus d’informations locales que SNMP) sur chacune des machines à monitorer.

Nous allons voir comment installer le serveur Zabbix ainsi que son front-end Web écrit en PHP, sous CentOS 5.

Installation du serveur Zabbix

Installation des dépendances

Avant tout, nous allons installer les dépendances de Zabbix, à savoir les librairies zlib, curl, openssl, net-snmp et openIPMI, pour pouvoir utiliser au maximum les fonctionnalités de Zabbix. Nous allons également installer un système de gestion de base de données, pour stocker toutes les données: PostgreSQL.

Nous allons maintenant initialiser la nouvelle base de données PostgreSQL:

Important: si vous avez déjà une base de données PostgreSQL sur votre serveur, n’initialisez pas la base! Vous pouvez également voir comment installer PostgreSQL 8.x sous Debian.

Installation du serveur

Maintenant, nous allons télécharger les sources de Zabbix pour l’installer. Vous trouverez les archives des sources sur la page de téléchargement du site Web de Zabbix.

Maintenant, nous allons commencer le processus de compilation en utilisant le programme ./configure avec nos options:

Si toutes les dépendances sont satisfaites, vous devriez avoir ce message:

Enable server: yes
Server details:
With database: PostgreSQL
WEB Monitoring via: cURL
Native Jabber: no
SNMP: net-snmp
IPMI: openipmi
SSH: no

[…]
Enable agent: yes
Agent details:
Linker flags: -rdynamic
Libraries: -lm -lresolv

LDAP support: no
IPv6 support: yes

Ensuite, il nous reste à compiler Zabbix:

À ce moment, vous pouvez installer Zabbix sur votre système comme ceci:

Note: Vous pouvez également créer un paquet de Zabbix avec cette configuration grâce au programme checkinstall.

Continue reading Installer Zabbix 1.8.x avec PostgreSQL sur CentOS 5

facebooktwittergoogle_plusredditpinterestlinkedinmail

PostgreSQL: Deux opérateurs pour les varchar arrays

PostgreSQL contient un module non activé par défaut nommé "intarray". Celui-ci permet d’ajouter des opérateurs et des fonctions entre tableaux d’entiers ou entre tableaux et entiers. les deux principales fonctionnalités sont, pour moi, les deux opérateurs + et - entre les tableaux d’entiers, int[].

Ayant pris l’habitude de les utiliser pour une application, j’ai eu besoin de ces mêmes opérateurs + et - pour des tableaux de chaines de caractères, varchar[]. C’est pourquoi, j’ai créé deux fonctions en Pl/pgSQL liées à ces deux opérateurs, afin de pouvoir faire la même chose qu’avec intarray. Concrètement, après la création de ces fonctions et de ces opérateurs, vous pouvez faire:

Continue reading PostgreSQL: Deux opérateurs pour les varchar arrays

facebooktwittergoogle_plusredditpinterestlinkedinmail

PHPpgAdmin 4.2.2 et PHP 5.3

Depuis PHP 5.3 toutes les fonctions utilisant les regex POSIX (ereg* et split*) sont maintenant obsolètes (qualifiée de DEPRECATED dans la documentation) et vont être supprimées dans PHP 6. Ces fonctions étant moins performantes, devenues presque inutiles à tous les projets cherchant la performance et surtout alourdissant PHP dans le sens où il y avait deux choix possible de regex, il était normal qu’elle disparaissent.

Néanmoins, il faut savoir que c’est la méthode la plus ancienne et donc la plus utilisée dans les portions de codes les plus vielles. Il se trouve que dans la version 4.2.2 de phpPgAdmin (dernière version stable, sortie il y a 1 an à deux jours près ;-)) il y a encore ces fonctions à quelques endroits, provoquant des Warning lors de l’éxécution de phpPgAdmin sous PHP 5.3.

Pour supprimer ces erreurs, voici un patch dans lequel j’ai remplacer toutes les occurrences de ereg* et split* par les équivalents en regex PCRE:

facebooktwittergoogle_plusredditpinterestlinkedinmail

PostgreSQL: Utiliser le principe du type “varlena”

PostgreSQL utilise depuis Postgres le type varlena, qui signifie variable length array en anglais, soit tableau à taille variable en français. Ce type permet de stocker des données à taille variable dans la base de données. Le principe est très simple: stocker en mémoire une ou plusieurs données de façon contiguë. De plus, il ne doit pas y avoir de pointeur dans le type.

La structure “de base” de varlena est définie dans le fichier src/include/c.h, line 401 pour PostgreSQL 8.4 par:

Note: le premier tableau de 4 caractères peu très bien est remplacé par un int32, ça revient au même: 4 octets.

Ce type représente le principe: un champ vl_dat, qui contiendra la donnée et d’autres champs qui ne doivent pas être des pointeurs, mais des entiers le plus souvent (ici un tableau de 4 caractères), qui contiennent des informations sur cette donnée. Cela permet à PostgreSQL de pouvoir stocker sur le disque et en mémoire toutes les données en une fois, pouvant ainsi les déplacer comme bon lui semble.

Attention: la propriété qui contient les données doit être la dernière propriété de la structure.

Tout type de donnée un peu complexe doit utiliser ce principe lorsqu’il stocke des données de taille variable en base afin d’assurer une intégrité aux données stockées. Nous allons voir, à l’aide de la librairie parse_url pour PostgreSQL, comment créer un type de données stockant de nombreuses données de taille variable dans une seule et même donnée, dans le but d’être utilisé comme type de colonne dans une table par exemple.

Continue reading PostgreSQL: Utiliser le principe du type “varlena”

facebooktwittergoogle_plusredditpinterestlinkedinmail

Librairie parse_url version 1.1

Présentée précédement pour ça première version, voici la version 1.1 de la librairie parse_url pour PostgreSQL. Cette nouvelle version corrige:

Elle ajoute:

  • Des clés de récupération via parse_url(text, text) :
    • host+port qui retourne l’hostname et le numéro du port, avec un “:” entre les deux
    • path+query qui retourne le path et le champ “query” avec un “?” entre les deux

Note: voir la page du projet

Continue reading Librairie parse_url version 1.1

facebooktwittergoogle_plusredditpinterestlinkedinmail