2011-11-22 5 views
5

È possibile eseguire l'installazione di bundle da una chiamata di sistema ruby?Installazione bundle tramite chiamata di sistema CLI/Ruby

Sto cercando di installare gemme e prove di correre per un progetto con un altro percorso ...

Ad esempio, il comando è:

"cd /some/other/project && bundle install && gem list && rspec spec" 

Idealmente voglio correre solo i test attraverso un rake file in un progetto assicurandosi che le gemme rilevanti per quel progetto siano installate.

Il cd sembra funzionare correttamente, se corro:

"cd /some/other/project && pwd" 

Si dà il percorso corretto. Ma se faccio un bundle installo l'ambiente gemello & & gem, sembra installare le gemme per la cartella corrente e non usa il Gemfile dell'altro progetto, e successivamente la specifica rspec non funziona.

Per riassumere, qual è il modo migliore per eseguire 'rspec spec' ad esempio, per un altro progetto all'interno di un rakefile garantendo anche che le gemme rilevanti siano disponibili?

risposta

0

Modifica: Penso di averlo capito. vedere se questo funziona per voi:

#@pwd is the "working directory of the execution... 

Dir.chdir @pwd do 
    so = "" 
    vars = { 
     "BUNDLE_GEMFILE" => nil, 
     "BUNDLE_BIN_PATH" => nil, 
     "RUBYOPT" => nil, 
     "rvm_" => nil, 
     "RACK_ENV" => nil, 
     "RAILS_ENV" => nil, 
     "PWD" => @pwd 
     } 
    options = { 
      :chdir=>@pwd 
      } 
    Open3.popen3(vars, cmd, options) do |stdin, stdout, stderr| 
    stdin.close_write 
    so = stdout.read 
    so = stderr.read if so.nil? || so == "" 
    end 

    so 
end 

originale del messaggio: Sto strappando i capelli fuori con questo. Penso che abbia qualcosa a che fare con fascio exec | Installare | delle variabili di ambiente quando si avvia l'applicazione di aggiornamento, ho cercato

bash -c "cd ../other/; bundle install; and it fails" Ho provato con open3.popen ("bundle install",: chdir = > "../ altro")

se è una consolazione non si è pazzi, ma io non riesco a capire come risolverlo.

Ho anche provato open3.popen ("bundle install", {: chdir => "../ altro",: unsetenv_others => false}) ma questo finisce per togliere RVM dal percorso di sistema;

0

Oltre alla risposta di kangguru, potrebbe essere necessario do

bundle install --deployment 

In modo che Bundler.with_clean_env non venga incasinato da rvm. Installa copie di tutte le gemme in .vendor/bundle nella radice del progetto, che viene quindi rilevata dal comando Bundler.with_clean_env.

(avrebbe messo questo come un commento, ma io non ho 50+ reputazione)

+0

ettari, appena reso conto che ho usato per lavorare con @easyjo. È un piccolo mondo di stackoverflow – xavriley