Migration redmine et Debian


Passage de Debian 10 à 11 avec Ruby 2.7

rédigé le : 14 octobre 2021

Migrer son service Redmine sur Debian 11


Aujourd'hui, je me suis lancé dans la migration d'un de mes serveurs contenant plusieurs services, tels que :

Mais aussi quelques services web, dont un qui me sert pratiquement tous les jours.

Redmine !!

Je me sers de ce logiciel de gestion de projets principalement détourné en logiciel de "ticketing".

Mais suite à la migration, je constate une erreur sur mon navigateur me notifiant de contacter mon administrateur système.

Coup de chance, c'est moi-même :) !

Vérification des logs Apache


Utilisant un service web apache2, je regarde tout de suite les logs, où je découvre l'erreur suivante :

Could not spawn process for application redmine-4.2.1: An error occurred while starting up the preloader.
Error ID: 4416ac9f
Error details saved to: /tmp/passenger-error-JTj86J.html
Message from application: <p>It looks like Bundler could not find a gem. Maybe you didn't install all the gems that this application needs. To install your gems, please run:</p>
<pre class="commands">bundle install</pre>

Le message est assez clair :

Maybe you didn't install all the gems that this application needs

Et en plus il nous propose la commande à lancer :

bundle install

Donc sans attendre je lance la commande :

root@server1:~# bundle install
-bash: /usr/local/bin/bundle : /usr/bin/ruby2.5 : mauvais interpréteur: Aucun fichier ou dossier de ce type

La voila mon erreur, et en outre, en regardant à nouveau les logs, je m'aperçois que cette possibilité est expliquée :

<p>If that didn't work, then the problem is probably caused by your application being run under a different environment than it's supposed to. Please check the following:</p>
<ol>
<li>Is this app supposed to be run as the <code>nobody</code> user?</li>
<li>Is this app being run on the correct Ruby interpreter? Below you will
see which Ruby interpreter Phusion Passenger attempted to use.</li>
</ol>

L'interpréteur Ruby utilisé par bundle n'est pas celui qui convient.

La migration de Debian 11 (Bullseye) a fait évoluer Ruby de la version 2.5 à 2.7. et effectivement lorsque que je regarde sous quel lien symbolique la commande ruby s'accroche, c'est bien celle de ruby2.7 maintenant

root@server1:# ls -l /usr/bin/ruby
lrwxrwxrwx 1 root root 7 19 oct. 2020 /usr/bin/ruby -> ruby2.7

Mais, alors pourquoi bundle ne prend pas en compte l’interpréteur par défaut ???

Commençons par savoir où se trouve ce script bundle

oot@server1:/# which bundle
/usr/local/bin/bundle

Et ce fichier, est-ce un binaire ou un fichier texte ?

root@server1:/# file /usr/local/bin/bundle
/usr/local/bin/bundle: Ruby script, ASCII text executable

Ouf, c'est un fichier texte (ASCII) ; plus qu'à lire le fichier avec son éditeur préféré (VI pour moi !! )

après lecture du fichier, je me rends compte que l’interpréteur est renseigné en dur :

#!/usr/bin/ruby2.5

Deux solutions s'offrent à moi : modifier le 2.5 en 2.7, ou supprimer complètement 2.5 car mon Ruby pointe par défaut sur ruby2.7. Pour tester, j'ai décidé de supprimer 2.5.

Ça y est !! Ma commande bundle est de nouveau fonctionnelle !!

root@server1:~# bundle
Could not locate Gemfile

Mais je ne suis pas dans le répertoire de redmine qui contient le "Gemfile" !!

Remise en fonction de Redmine


Comme bundle est maintenant opérationnel, je me place dans mon répertoire redmine, là où se trouve le fichier Gemfile

et je lance la commande :

root@server1:/redmine-4.2.1# bundle install

qui met à jour tous mes gem metadata :

Fetching gem metadata from https://rubygems.org/............
Using rake 13.0.3
...
Bundle complete! 36 Gemfile dependencies, 64 gems now installed.
Gems in the groups development and test were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

Test sur mon navigateur Web

Et voilà !!

Redmine est de nouveau fonctionnel.

Merci de recopier le texte suivant :