Fondamentalement, est-il possible d'utiliser gems comme gestionnaire de packages génériques d'exécutables et de ne pas tenir compte du ruby ?

Disons que j'ai créé un script batch et un script bash qui font des choses obscures, ce qui est impossible à faire avec Ruby.

Est-il possible de les empaqueter dans un gem et de permettre aux utilisateurs de les installer avec gem install ?

Le problème principal est que bien que gemspec me permette de fournir une liste d'exécutables, il suppose qu'il s'agit de scripts ruby. Pour cette raison, gem install crée des wrappers spécifiques à la plate-forme qui se résument à

$ ruby file-which-is-listed-as-executable-in-gemspec

Cela ne fonctionne évidemment pas pour mes scripts batch et bash.

La raison pour laquelle je ne peux pas simplement créer un exécutable ruby ​​qui, à son tour, exécute ces scripts est que je vais perdre l'environnement actuel. Le fichier batch définit les variables d'environnement qui doivent rester après l'exécution et le script bash est censé être appelé avec source afin que les variables qu'il exporte restent. L'invocation de l'un d'entre eux avec ruby ​​annulera toutes les modifications de la variable d'environnement car elles ne se produiront que dans l'environnement de processus de ruby.

La raison pour laquelle je considère les gemmes est que ces scripts finissent par appeler des exécutables ruby ​​et qu'il s'agit essentiellement d'une gemme ruby. Je veux fournir les aides à la configuration de l'environnement avec.

1
Borislav Stanimirov 6 nov. 2020 à 12:05

1 réponse

Meilleure réponse

Après quelques recherches, j'ai trouvé que la réponse est "presque". Cela peut fonctionner si l'on installe le gem avec --no-wrapper, alors tous les exécutables seront ajoutés sans wrapper dans le répertoire bin. C'est un peu désagréable, mais ça marche.

Problème pertinent : https://github.com/rubygems/rubygems/issues/88

Une autre question (essentiellement la même que celle-ci) : Déployez un script shell avec Ruby gem et installez-le dans le répertoire bin

1
Borislav Stanimirov 6 nov. 2020 à 12:28