Snow Leopard에 최신 버전의 Ruby 설치


4

에 설치된 최신 버전의 ruby ​​1.9.2를 다운로드하여 컴파일 /usr/local/bin/ruby했지만 시스템은 시스템에 /usr/bin/ruby설치된 1.8.7 만 인식 합니다. 새로운 루비를 어떻게 제자리에 넣을 수 있습니까?

이 경우 루비 버전을 교체하고 명령 행 작업 및 레일 개발을 위해 업데이트 된 버전을 사용할 수 있어야합니다.


2
RVM (Ruby Version Manager)을 살펴보면 프로젝트마다 다른 gemset과 함께 여러 루비 버전을 설치할 수 있습니다. rvm.beginrescueend.com
barryj

1
/ usr / bin / ruby를 대체해야합니까, 아니면 RVM 또는 $ PATH 변수 수정과 같은 대안을 열 수 있습니까?
bmike

예, 현재 시스템에 설치된 루비 버전을 교체해야합니다. 내가 받고있는 답변을 바탕으로하기가 어려운 것 같습니다.
Jason Yost

당신이 무슨 말을하는지 이해하고 싶습니다. "바꾸기"루비는 루비의 "다른 버전 사용"과는 매우 다릅니다. 후자를 원한다면 RVM은 몇 가지 언급했듯이 훌륭한 옵션입니다. 당신이 경우 확실히 당신은 할 대체 그때 내 대답은 아래의 바닥에 그렇게하는 방법을 설명, 루비의 시스템의 버전 (그리고 부정적인 결과를 초래할 수 이해). 어느 쪽이든 지금 여기에 귀하의 질문에 대답 할 많은 정보가 있어야합니다.
오스틴

RVM은 시스템 버전의 루비를 대체하는 것이 아니라 갈 길입니다. 귀하의 의견에 감사드립니다.
Jason Yost

답변:


9

Ruby 버전 관리자 인 RVM을 사용해야합니다 . 그것은 시스템의 루비 설치에 영향을 미치지 않으면 서 루비의 여러 병렬 설치를 가능하게합니다. 루비는 다른 주석가가 지적했듯이 잠재적 으로 문제가 될 있습니다.

루비의 최신 패치 레벨, 루비 버전, 또는 JRuby, MacRuby 또는 Rubinius와 같은 대체 구현을 빠르고 쉽게 설치할 수 있습니다.

설치하기 위해서:

$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

일단 설치되면 1.9.2를 기본값으로 설정하는 것은 입력하는 것만 큼 간단합니다.

rvm default 1.9.2

그리고 일시적으로 1.8.7로 다시 전환하고 싶다면 :

rvm use 1.8.7

+1 RVM을 사용하여 Ruby 설치 및 젬셋을 관리하면 인생이 바뀌 었습니다. 비 호환성 또는 충돌이 발생할 때마다 몇 분 안에 백업 및 실행됩니다.
ghoppe

나는 RVM을 좋아하지만 이것은 제기 된 질문에 대답하지 않습니다. OP에는 이미 컴파일하려는 루비가 있으며 $ PATH를 사용하여 공존하지 않으려는 의도가 있습니다.
bmike

1
@bmike OP 음성의 의도는 어디입니까? 나는 그것을 보지 못한다. StackExchange에 대한 질문에 답변하는 것이 무엇을 의미하는지에 대한 귀하의 해석에 동의하지 않습니다. 조언을 제공하고, 대안을 제시하고, 모범 사례를 설명하는 것은 그들이 요구하는 요구 사항을 해결하는 경우에도 유효한 답변입니다.이 경우 Snow Leopard에 최신 버전의 Ruby를 설치하는 것입니다.
michaelmichael

RVM이 비표준 루비를 유지하는 가장 좋은 방법이라는 데 동의합니다. 그러나 질문이 편집되지 않는 한 (질문이 더 잘 당신의 큰 대답과 일치하도록 할 것입니다) 나는 "RVM 사용"이 "/ usr / bin / ruby를 1.8에서 어떻게 바꾸는가?"라는 질문에 어떻게 대답하는지 잘 모르겠습니다. 1.9.2에서 / usr / local / bin / ruby가있는 7? " OP에 / usr / bin / ruby를 호출하도록 하드 코딩 된 스크립트가있는 경우 어떻게합니까? RVM이 도움을주기 위해 개입합니까?
bmike

2

"새로운 루비를 제자리에 설치"한다는 것은 무엇을 의미합니까?

command 명령 만 사용하여 명령 행에서 실행하려고하면 ruby, 시스템은 /etc/paths일치하는 것을 찾을 때까지 지정된 각 경로 를 순서대로 검색합니다. Snow Leopard에서 기본 /etc/paths파일은 다음과 같습니다.

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

따라서 ruby명령 행에 입력 하면 시스템이 /usr/bin/ruby먼저 찾아서 찾은 후 나머지 경로를 확인하지 않습니다 (따라서 절대 도달하지 않음 /usr/local/bin/ruby). 이를 확인하기 which ruby위해 명령 행에 입력 하면 시스템이 해당 명령에 사용할 실행 파일의 경로를 인쇄합니다.

명령 행에서 최신 버전의 Ruby를 실행하려면 /usr/local/bin/ruby대신 대신 입력하십시오 ruby.

Ruby를 간접적으로 사용하는 다른 프로그램을 사용하는 경우 경로를 지정하는 옵션이있을 수 ruby있습니다.


편집 : 최후의 수단으로 내장 시스템 버전의 Ruby를 최신 버전으로 덮어 쓸 수 있습니다. 다음 명령을 사용하고 프롬프트가 표시되면 관리자 비밀번호를 입력하십시오.

cp /usr/bin/ruby ~/Desktop/ruby_OLD
sudo cp /usr/local/bin/ruby /usr/bin/ruby

무언가가 깨지면 다음 명령으로 다시 넣으십시오.

sudo mv ~/Desktop/ruby_OLD /usr/bin/ruby

그러나 다른 사람들이 언급했듯이 RVM과 같은 도구를 사용하여 Ruby를 관리하는 것이 기본 제공 설치를 업그레이드하는 것보다 낫습니다.


2
시스템 구성 요소를 덮어 쓰는 것은 일반적으로 나쁜 생각입니다. /usr/bin/rubyApple 제공 여부에 따라 다른 응용 프로그램이있을 수 있습니다 ruby.

@Bavarious 나는 rubyOS X에서 그 가능성이 매우 희박하다고 생각합니다 (PHP4에서 PHP5와 같은 주요 변경에 대해 이야기하고 있다면 다를 것입니다). 그러나 당신은 그것이 일반적으로 나쁜 생각이라는 것이 옳습니다. 이것이 제가 마지막으로 언급 한 이유입니다. 이 사용자가 1.8.7보다 1.9.2를 선호하거나이 질문을하지 않는 이유가 있다고 가정합니다. 최신 버전을 실행하면 잠재적 인 이점이 다음 미성년자로 업그레이드되어 무언가를 깨뜨릴 수있는 작은 위험을 능가 할 수 있습니다. 번역.
오스틴

"작은"위험이 확실합니까? RVM으로 Ruby를 관리하는 것이 훨씬 쉽고 안전합니다.
ghoppe

@ghoppe 루비를 업그레이드하여 OS X에서 중요한 핵심 시스템 기능을 깨뜨리지 않기 때문에 위험은 "작다"고 말합니다. 문제가 발생하기 어려운 시스템의 작은 구석에 문제가 생길 수 있습니까? 아마도. 궁극적으로 루비를 자주 업데이트 할 계획이라면 주요 두통은 아마도 유지 보수와 관련이있을 것입니다. RVM이 좋은 옵션이며 시스템 파일을 변경하는 것보다 훨씬 바람직하다는 것은 확실합니다.
오스틴

2

기존 파일 ( /usr/bin/ruby심볼 링크 /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby) 을 바꾸려면 파일 권한과 일치하도록주의해서 컴파일 한 파일로 기존 파일을 덮어 쓰십시오 .

이를 수행하지 않는 이유는 많지만 질문에 대한 문자 적 ​​해석을 고려하면 간단합니다.

대부분의 사람들은 시스템보다 먼저 새로운 루비를 포함하도록 경로를 변경합니다. 왜냐하면 설치된 루비 버전과 관련 dylib, gem, rdocs 등에 의존하는 다른 것들을 깰 가능성이 더 적기 때문에 시스템 루비가 더 낫기 때문입니다.

홈브류핀크 , RVMMacPorts 의 이점 중 하나 는 다른 위치로 스테이징을 자동화하고 경로 수정을 지원한다는 것입니다.

/usr/local/bin경로 변수를 조작하고 which -a ruby나중에 작업을 다시 확인하여 루비를 사용하여 동일한 작업을 수행 할 수 있습니다 .


2

Apple이 제공 한 ome 이전에 자체 설치된 프로그램을 찾는 방법은 새 프로그램의 디렉토리 (예 : / usr / local / bin)를 PATH 환경 변수의 fromt에 추가하는 것입니다.

쉘에서 루비를 실행하는 경우 ~ / .profile을 편집하거나 GUI ~ / .MacOSX / environment.plist에서


OP가 요구하는대로 바이너리를 교체하는 것보다 IMHO가 더 좋습니다.
bmike

0

Homebrew를 살펴보고 싶을 수 있습니다 . 최신 Ruby를 설치하는 것이 쉬워집니다 brew install ruby. 이미 시스템에있는 어떤 것도 방해하지 않고 (거의 확실하게) 이미있는 위치에 다른 많은 패키지가 있습니다 $PATH.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.