Domanda

Sto scrivendo un gemma rubino che gli utenti possono installare e utilizzare lo strumento Ruby della riga di comando per interagire con il servizio.Puoi iniziare e fermare il servizio (generarà un processo figlio).

Ho fatto molte ricerche sulle cose migliori da utilizzare per scrivere un servizio di rete, come Ømq / eventmachine e ottengo come creare un gemma rubino che installerà un binario che è possibile utilizzare nella riga di comando,Ma sto lottando per stabilire una buona struttura del codice.

La mia utilità della riga di comando prenderà vari argomenti (utilizzerò trollop ) e lo userà variClassi per fare le cose e usa varie altre gemme rubino.

Non sono sicuro di dove dovrei mettere i miei file di classe e come richiederli nel mio binario in modo che i percorsi siano corretti.

È stato utile?

Soluzione

In gran parte, Rubygems si prenderà cura di questo per te. Dovrai includere il tuo eseguibile nell'elenco files e inserirlo nel executables nel tuo GEMSpec. È comune mettere il tuo eseguibile in bin nella tua directory, ad esempio.:

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

Il tuo Gemspec sarà quindi come:

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
.

A questo punto, quando gli utenti installano la tua app tramite Rubygemms, myapp sarà nel loro percorso, e lib sarà nel caricamento del tuo app, quindi il tuo eseguibile può semplicemente iniziare con:

#!/usr/bin/env ruby

require 'myapp'
# whatever other requires
.

L'unico problema con questo è quello, durante lo sviluppo, non puoi semplicemente fare bin/myapp e far funzionare la tua app. Alcuni Devs manipolano il percorso di carico tramite $: o $LOAD_PATH, ma questa è considerata una cattiva forma.

Se stai usando Bundler, è più facile semplicemente eseguire la tua app localmente con bundle exec, ad es. bundle exec bin/myapp. È possibile utilizzare alternativamente la variabile di ambiente RUBYLIB, ad es. RUBYLIB=lib bin/myapp, che metterà lib nel percorso di carico.

Altri suggerimenti

È possibile generare una struttura del progetto GEM con Bundler .

brevemente:

Installa Bundler

$ gem install bundler
.

Usa Bundler per generare il progetto GEM

$ bundle gem myapp
$ cd myapp
.

Aggiungi un eseguibile

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

  require 'myapp'

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

Installa il tuo gemma

$ rake install
.

Esegui il tuo script

$ mycommand
Executing mycommand
.

Condividi la tua utilità su rubygems.org

$ rake release
.

Più documenti su Il sito Web

Poiché tutte le gemme sono open source per natura, potresti sempre dare un'occhiata ad alcuni dei migliori per gli esempi.L'utilizzo di un Gem Builder come jeweler o hoe ti avrebbe anche impostato con parte della struttura di base organizzativamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top