Запуск Rspec из совершенно другого приложения Sinatra?

В настоящее время я пытаюсь запустить инфраструктуру Sinatra, которая загружает код из репо, выполняет rspec для кода, а затем обрабатывает результаты из RSpec. Однако у меня возникают проблемы с запуском rspec, когда я вызываю его из другого приложения.

Я продолжаю получать следующую ошибку:

/Users/dir/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.1.5/lib/bundler/rubygems_integration.rb:147:in `block in replace_gem': rspec-core is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
    from /Users/dir/.rvm/gems/ruby-1.9.3-p194/bin/rspec:22:in `<main>'

После запуска тонны вывода он в основном сводится к тому, что рубин не переключается в правильный каталог перед выполнением пакета exec. Я пробовал практически все, чтобы заставить его работать, но безуспешно... Кажется, даже если я изменю каталог, он продолжит попытки запустить RSpec в приложении, в котором я работаю, а не в том, которое я хочу сделай это.

  Dir.chdir('../target_app'){
    exe = "bundle exec rspec spec"
    `#{exe}`
  }

Я также безуспешно пробовал обратные кавычки, exec и system().

`cd ../target_app && bundle exec rspec spec`

Я также пробовал такие вещи, как ChildProcess, но безуспешно:

  p = ChildProcess.build('bundle', 'exec', 'rspec', 'spec')
  p.io.inherit!
  p.cwd = '../target_app'
  p.start

Любая подсказка или помощь в том, как решить эту проблему, будет принята с благодарностью!

Редактировать:

Я также пробовал bundle install --binstub --path vendor

с этим кодом:

  Dir.chdir('../target_app'){
    puts `pwd`.chomp
    exe = "bin/rspec spec -o ../tmp.txt"
    puts exe
    `#{exe}`
  }

Я получаю этот вывод:

/Users/me/dev/target_app
bin/rspec spec -o ../tmp.txt
/Users/me/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.1.5/lib/bundler/rubygems_integration.rb:223:in `block in replace_bin_path': can't find executable rspec (Gem::Exception)
    from bin/rspec:16:in `<main>'

person roloenusa    schedule 23.01.2013    source источник


Ответы (1)


Создайте binstub для Bundler bundle install --binstubs и используйте binstub вместо rspec, чтобы всегда использовались правильные rspec и Gemfile.

http://gembundler.com/v1.2/man/bundle-exec.1.html (дополнительную информацию о binstub можно найти на этой онлайн-справочной странице)

person Jim Deville    schedule 23.01.2013
comment
+1. Я всегда делаю это сейчас, для каждого проекта. Я также добавляю --path vendor, это действительно помогает отделить весь проект от всего, над чем я работаю. YMMV - person iain; 23.01.2013
comment
Я только что попробовал это, но все еще безуспешно. Я следовал инструкциям отсюда: robots.thoughtbot.com/post/15346721484 /use-bundlers-binstubs, и я все еще получаю ту же ошибку. Я думаю, мне нужно загрузить gemfile из этой папки, но я не уверен, что это работает или это правильный путь. - person roloenusa; 23.01.2013
comment
Вы хотите выполнить bin/rspec относительно вашего исходного приложения, а не целевого приложения. Установите путь к bin/rspec перед выполнением Dir.chdir с использованием rspec = File.expand_path("./bin/rspec") (если это сработает, получение полного пути на основе File.dirname(__FILE__) может быть более надежным. - person Jim Deville; 23.01.2013