Question

J'écris un joyau Ruby que les utilisateurs peuvent installer et utiliser l'outil Ruby en ligne de commande pour interagir avec le service.Vous pouvez démarrer et arrêter le service (il générera un processus enfant).

J'ai fait beaucoup de recherches sur les meilleures choses à utiliser pour écrire un service réseau, tel que ØMQ/EventMachine et je comprends comment créer une gemme Ruby qui installera un binaire que vous pouvez utiliser dans la ligne de commande, mais je' J'ai du mal à établir une bonne structure de code.

Mon utilitaire de ligne de commande prendra divers arguments (j'utiliserai Catin) et il utilisera diverses classes pour faire des choses et utilisera diverses autres gemmes de rubis.

Je ne sais pas où placer mes fichiers de classe et comment les exiger dans mon binaire pour que les chemins soient corrects.

Était-ce utile?

La solution

En grande partie, RubyGems s'en chargera pour vous.Vous devrez inclure votre exécutable dans le files liste et mettez-la dans la executables dans votre gemspec.Il est courant de placer votre exécutable dans bin dans votre répertoire, par exemple :

$ ls
bin/   myapp.gemspec  lib/    Rakefile
$ ls bin
bin/myapp

Votre gemspec ressemblerait alors à :

Gem::Specification.new do |s|
  s.name = 'myapp'

  # whatever else is in your gemspec

  s.files = ["bin/myapp","lib/myapp.rb"]  # or whatever other files you want
  s.executables = ["bin/todo"] 
end

À ce stade, lorsque les utilisateurs installent votre application via RubyGems, myapp sera sur leur chemin, et lib sera dans le chemin de chargement de votre application, votre exécutable peut donc simplement commencer par :

#!/usr/bin/env ruby

require 'myapp'
# whatever other requires

Le seul problème est que, pendant le développement, vous ne pouvez pas simplement faire bin/myapp et faites fonctionner votre application.Certains développeurs manipulent le chemin de chargement via $: ou $LOAD_PATH, mais cela est considéré comme une mauvaise forme.

Si vous utilisez un bundler, il est plus simple d'exécuter votre application localement avec bundle exec, par exemple. bundle exec bin/myapp.Vous pouvez alternativement utiliser le RUBYLIB variable d'environnement, par ex. RUBYLIB=lib bin/myapp, ce qui mettra lib dans le chemin de chargement.

Autres conseils

Vous pouvez générer une structure de projet GEM avec Bundler .

brièvement:

Installez Bundler

$ gem install bundler

Utilisez Bundler pour générer le projet GEM

$ bundle gem myapp
$ cd myapp

ajoutez un exécutable

$ mkdir bin
$ cat > bin/mycommand << EOSCRIPT
  #!/usr/bin/env ruby

  require 'myapp'

  puts "Executing myapp"
  EOSCRIPT
$ chmod +x bin/mycommand

Installez votre gemme

$ rake install

Exécutez votre script

$ mycommand
Executing mycommand

Partagez votre utilitaire sur rubygems.org

$ rake release

Plus de documents sur Le site Web

Étant donné que toutes les pierres précieuses sont par nature open source, vous pouvez toujours consulter certaines des meilleures pour obtenir des exemples.Utiliser un générateur de gemmes comme jeweler ou hoe vous mettrait également en place avec une partie de la structure de base sur le plan organisationnel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top