Sono ruby ??switch della riga di comando -rubygems & amp; -r incompatibile?

StackOverflow https://stackoverflow.com/questions/124035

  •  02-07-2019
  •  | 
  •  

Domanda

Di recente ho convertito una libreria di rubini in una gemma, che sembrava infrangere l'usabilità della riga di comando

Ha funzionato bene come libreria

  $ ruby -r foobar -e 'p FooBar.question' # => "answer"

E come gemma, irb sa come richiedere una gemma dalle opzioni della riga di comando

  $ irb -rubygems -r foobar
  irb(main):001:0> FooBar.question # => "answer"

Ma lo stesso fallisce per il rubino stesso:

  $ ruby -rubygems -r foobar -e 'p FooBar.question'
  ruby: no such file to load -- foobar (LoadError)

ora devo farlo, il che sembra brutto:

  ruby -rubygems -e 'require "foobar"; p FooBar.question' # => "answer"

O c'è un modo per far funzionare i 2 switch?

Nota : so che la gemma potrebbe aggiungere un bin / programma per ogni metodo utile, ma non mi piace inquinare inutilmente lo spazio dei nomi della riga di comando

È stato utile?

Soluzione

-rubygems è in realtà lo stesso di -r ubygems.

Non scherza con il tuo percorso di ricerca, per quanto ne so, ma penso che non aggiunga nulla al tuo percorso di ricerca -r. Sono stato in grado di fare qualcosa del genere:

ruby -rubygems -r /usr/lib/ruby/gems/myhelpfulclass-0.0.1/lib/MyHelpfulClass -e "puts MyHelpfulClass"

MyHelpfulClass.rb esiste nella directory lib sopra specificata.

Questo tipo di schifo, ma almeno dimostra che puoi avere più direttive -r equire.

Come soluzione leggermente meno brutta, puoi aggiungere ulteriori elementi al percorso di ricerca della libreria ruby ??(due punti delimitati da * nix, punti e virgola delimitati da Windows).

export RUBYLIB=/usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib
ruby -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass"

Se non vuoi fare confusione con la variabile d'ambiente, puoi aggiungere qualcosa al percorso di caricamento:

ruby -I /usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib \
   -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass"

Altri suggerimenti

Nota: questo problema esiste per ruby ??1.8, ma è stato risolto in ruby ??1.9.

Su 1.8, se specifichi entrambe le librerie tramite -r , ruby ??proverà a caricare ciascuna libreria senza prestare attenzione alle modifiche in $ LOAD_PATH . Ma rubygems cambia $ LOAD_PATH in modo da poter trovare le gemme.

Il motivo per cui funziona con irb è che irb non presta attenzione alle modifiche di $ LOAD_PATH .

Sfortunatamente, la migliore soluzione che ho trovato è usare la forma più dettagliata:

ruby -rubygems -e 'require "foobar"; p FooBar.question'

Il dolore non aumenta linearmente con il numero di librerie, se usi un iteratore:

ruby -rubygems -e '%w(rake rspec).each{|r| require r }'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top