Ruby : comment résoudre l'erreur You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory ?

Lorsque vous voulez développer une application dans le langage Ruby avec votre Mac, vous devez respecter une procédure particulière. En effet, le système d'exploitation macOS a la particularité d'accepter le langage Ruby pour le développement d'applications natives. Un Mac a donc par défaut une version de Ruby installée pour exécuter les applications, et cela peut provoquer des conflits si vous essayez d'installer des gems, par exemple le message d'erreur "You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory".

Ce message d'erreur signifie que le gem que vous essayez d'installer va s'installer dans un répertoire du système et que vous n'avez pas la permission nécessaire pour effectuer cette opération. Il est déconseillé de passer outre cette permission (avec le préfixe "sudo"), car cela peut nuire à la stabilité de votre système. Il est plutôt recommandé d'installer une autre version de Ruby, afin ensuite de pouvoir installer les gems dont vous avez besoin. Le gestionnaire de paquets Homebrew permet de le faire facilement. La commande suivante va installer une nouvelle version sur votre système, indépendante de celle utilisée par les applications.

ruby-install ruby

Après l'installation, Homebrew vous donnera les manipulations à faire afin d'ajouter le chemin vers la version de Ruby que vous venez d'installer dans la variable "PATH". Cela se fera en modifiant le fichier ".zhrc" ou le fichier ".bash_profile". Redémarrez ensuite toutes les instances du terminal, et la nouvelle version de Ruby sera utilisée. Vous pouvez utiliser la commande "gem install" pour installer des gems sans avoir de message d'erreur.

gem install bundler

Si vous souhaitez manipuler plusieurs versions de Ruby, Homebrew met à disposition des librairies permettant de faire ces installations. Elles créent des environnements virtuels avec des versions de Ruby spécifiques installées dedans et l'on doit ensuite changer d'environnement selon son projet. Il existe notamment les librairies chruby, ruby-install ou par exemple rbenv.