2016-11-28 2 views
0

ruby ​​스크립트 내에서 homebrew 쉘 명령을 실행하려고합니다.Ruby의 kernel.system 내에서 자작 (homebrew)

홈브류 쉘 명령을 잘 적용 할 수 있습니다.

$ brew list | head -n 1 
ack 

가 나는 또한 잘 루비에서 쉘 명령을 실행할 수 있습니다 : 나는 루비에서 사제 쉘 명령을 실행할 때

$ bundle exec ruby -e "Kernel.system('echo foo')" 
foo 

그러나, 나는 bundler-를 얻을 예를 들어,이 문제없이 작동 관련 오류 :

bundle exec ruby -e "Kernel.system('brew list')" 
Your bundle is locked to bubs (0.0.6), but that version could not be found in any of the sources listed in your Gemfile. If you haven't changed sources, that means the author of bubs (0.0.6) has removed it. You'll need to update your bundle to a different version of bubs (0.0.6) that hasn't been removed in order to install. 

이는 가능한 가장 작은 가능한 Gemfile (이는 별 문제가되지 않음)에서도 발생합니다.

source 'https://rubygems.org' 

gem 'bubs' 

그래서, 사제, 루비, 들러, 어쩌면 RVM의 어떤 부분 집합 (내 루비가 현재 설치되어있는 방법입니다) 함께 잘 재생되지 않습니다.

왜 내가이 오류를 얻고 있는지, 그리고/또는 어떻게 homebrew 명령을 루비에서 작동시킬 수 있는지 생각해보십시오.

+0

'brew'은 루비로 작성은 gemsets 충돌이 있습니다. 명령 앞에서'bundle exec'를 생략하면'ruby -e "Kernel.system ('brew list')"'가 작동합니다. – mudasobwa

+0

불행히도 이것은 단지 테스트 케이스에 불과합니다. 실제 프로젝트에서'bundle exec '을 제거 할 수 없습니다. 내가 만들고있는 전반적인 것은 다른 도구에 의존하는 보석입니다. 다른 도구가 설치되어 있지 않으면 '도구를 추출하여 설치'합니다. 제가 만들고있는 보석은 많은 보석과 마찬가지로 bundler를 사용하여 제작되었으며 bundler를 많이 사용합니다. gemset 충돌에 대해서는 이와 비슷한 것으로 보입니다. 그러나 실제로 어떤 보석이 나열되어 있는지는 중요하지 않습니다. 예를 들어, 나의 질문에있는 Gemfile 예제는 의존성이없는 무작위로 선택한 하나의 작은 보석만을 사용한다. – Fishtoaster

+0

다시 한번 말하지만 이것은 루비로 쓰여진'brew'와 응용 프로그램 사이의 **'gemset' ** 충돌입니다. 물론, 그것은'Gemfile'에 어떤 보석이 있는지에 달려 있지 않습니다. 현재의 환경을 파생시키지 않는 새로운 셸에서 '양조주'를 실행 해 볼 수도 있습니다. – mudasobwa

답변

0

검색 후 대답을 찾았습니다. 번들러에서 포격을 포장하십시오 (Bundler.with_clean_env). 예 : bundle exec ruby -e "Bundler.with_clean_env { Kernel.system('brew list') }"이 작동합니다.

번들은 Bundler.clean_system('brew list') 같은 단축키를 제공합니다. 워드 프로세서

: http://bundler.io/v1.13/man/bundle-exec.1.html#Shelling-out

관련 문제