2013-10-04 7 views
0

자동화를 위해 요리사를 사용했습니다.시스템 스크립트에서 생성 된 루비 변수에서 새로운 줄을 제거하는 방법

필자의 시나리오 중 하나는 내 시스템에 설치된 rvm에서 승객의 버전 번호를 추출해야한다는 것입니다.

나는 이것에 대한 변수 'pasver'사용 :

 
pasver = `/usr/local/rvm/bin/gem list | grep passenger`.sub /.*\((.*)\).*/, '\1'  

하지만이 경우,이 변수를 사용하는 경우 :

 
if ! ::File.exists?("/usr/local/rvm/gems/#{node['redmine']['rubyversion']}/gems/passenger-#{pasver}/buildout/apache2/mod_passenger.so") then 

그리고이 조건은 블록의 경우에 항상 false입니다 및 코드 실행되지 않습니다.

pasver 변수에 새 행이 들어 있기 때문입니다.

어떻게이 새로운 줄을 제거 할 수 있습니까?

나는 다음 방법을 사용하지만, 성공적으로없는 : 왜

pasver.chomp! 
시스템 호출 후

또는를 사용

 
pasver = `/usr/local/rvm/bin/gem list | grep passenger`.sub /.*\((.*)\).*/, '\1'.gsub("\n",'') 

+0

하십시오이 관련 답을 표시합니다. – CodeGroover

+0

나는 나의 대답을 표시한다 -이 질문의 마지막 대답. – vskubriev

답변

0
  1. 요리사 사용자는 나에게 정규 표현식

    pasver = /usr/local/rvm/bin/gem list | grep passenger .SUB/대한 솔루션을 제안했다. ((.)). */m, '\ 1'

  2. 그러나 그것은 모든 아니라, ERB 템플릿 자체에서이 코드를 사용하여 문제가 발생했습니다. 변수 값이 사라지지만 그 이유는 모르겠습니다.

예를 들어이 코드는 작동하지 않습니다.

<% pasver = `/usr/local/rvm/bin/gem list | grep passenger`.sub /.*\((.*)\).*/, '\1'.chomp %> 
    PassengerRoot <%= "/usr/local/rvm/gems/#{node['redmine']['rubyversion']}/gems/passenger-#{pasver.chomp!}" %> 
    PassengerDefaultRuby /usr/local/rvm/wrappers/<%= node['redmine']['rubyversion']%>/ruby 

이 파일은 생성

LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.19 
    /buildout/apache2/mod_passenger.so 

내가 IRB에서 이상한 행동을 결코 얻을하지 않습니다. 그러나 요리사 런타임은 다른 것입니다.

내 솔루션 조리법에 변수를 사용하여 다음 템플릿 리소스에 전달됩니다 : 당신이 하나를 발견하는 경우

template ".." do 
variables ({ 
:pasver => pasver 
}) 
end 
2

if ! ::File.exists?("/usr/local/rvm/gems/#{node['redmine']['rubyversion']}/gems/passenger-#{pasver.chomp}/buildout/apache2/mod_passenger.so") then 
당신은에) (rstrip 사용할 수 있습니다
+0

이것은 도움이되지 못했습니다! 요리사의 특징으로 인해있을 수 있습니다. – vskubriev

+0

I ERB 템플릿에서 비슷한 구문을 사용하지만, 그렇지 않습니다. 다른 파일 내 코드를보십시오 : <% pasver ='/ usr/local/rvm/bin/gem list | grep passenger' /. * ((..) \). * /, '\ 1'.씹는 %> PassengerRoot <% = "/usr/local/rvm/gems/#{node['redmine']'['rubyversion']}/gems/passenger-#{pasver.chomp!}"%> PassengerDefaultRuby/ruby ​​ – vskubriev

+0

문제가 *'* chomp'가 아니라 그 자체로 구현 된 것 같아요./usr/local/rvm/wrappers/<% node [ 'redmine'] [[ 'rubyversion'] . – AGS

0

후행 공백을 제거하기위한 문자열. 이것에 대해

1

방법 : 메일 링리스트

irb> require 'rubygems' 
irb> g = Gem::Specification.find_all_by_name 'passenger' 
irb> g.first.version.version 
=> "4.0.19"