2011-11-22 10 views
5

Czy można uruchomić instalację pakietu z połączenia systemu ruby?Instalacja pakietu za pomocą wywołania systemowego CLI/Ruby

Próbuję zainstalować klejnoty i testy wykonywane na projekt pod inną ścieżkę ...

Na przykład polecenie brzmi:

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

Idealnie chcę po prostu uruchomić poprzez testy zgraj plik w jednym projekcie, jednocześnie upewniając się, że odpowiednie klejnoty dla tego projektu są instalowane.

Cd wydaje się działać poprawnie, jeśli biegnę:

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

To daje poprawną ścieżkę. Ale jeśli zrobię pakiet instalacji & & środowiska gem, wydaje się zainstalować klejnoty dla bieżącego folderu i nie używa Gemfile z innego projektu, a następnie specyfikacja rspec nie działa.

Podsumowując, jaki jest najlepszy sposób uruchomienia "specyfikacji rspec" na przykład dla innego projektu w pliku rake, który zapewnia również dostępność odpowiednich klejnotów?

Odpowiedz

0

Edytuj: Myślę, że mam to wymyślić. sprawdzić, czy to działa dla Ciebie:

#@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 

Original post: ja łzawienie włosy się z tym. Myślę, że ma to coś wspólnego z wiązki Exec | instalacja | ustawienie zmiennych środowiskowych po uruchomieniu aplikacji Update, próbowałem

bash -c "cd ../other/; bundle install; and it fails" Próbowałem, używając open3.popen („bundle install”: chdir = > "../ inny")

Jeśli to jest jakaś pociecha, nie jesteś szalona, ​​ale nie mogę się dowiedzieć, jak to naprawić.

że próbował również open3.popen ("zespół instalacji" {: chdir => "../ Inne": unsetenv_others => false}) lecz kończy się usuwanie RVM ze ścieżki systemu;

0

Oprócz odpowiedzi kangguru użytkownika, może być konieczne do

bundle install --deployment 

Tak, że Bundler.with_clean_env nie zostanie popsuta przez rvm. Spowoduje to zainstalowanie kopii wszystkich Twoich klejnotów w pliku .vendor/bundle w katalogu głównym projektu, który jest następnie pobierany za pomocą polecenia Bundler.with_clean_env.

(dałoby to jako komentarz, ale nie mam 50+ reputacji)

+0

ha, po prostu sobie sprawę, że używane do pracy z @easyjo. To mały świat stackoverflow – xavriley

Powiązane problemy