Rails 앱이 사용중인 gem의 버전을 확인하는 방법


116

Rails 앱을 조사 중입니다. prod 서버에 특정 gem의 두 가지 버전이 설치되어 있습니다. prod 앱이 사용중인 버전을 어떻게 알 수 있나요?


어떤 버전의 레일이나 다른 gem의 어떤 버전인지 묻고 있습니까?
BJ Clark

1
특정 gem의 버전.
Steve Brewer

공급 업체 / 보석 아래에 보석이 고정되어 있고 기본 보석 위치에 최신 버전의 gem이 설치되어 있습니다. "I load this gem from this location"이라는 레일에서 찾고 있습니다.
Steve Brewer

답변:


172

Rails 3 및 Rails 4에서는 bundle show

Rails 2에서는 rake gems어떤 gem, 의존성, 버전이 설치되고 고정되어 있는지 출력합니다.


2
gem이 environment.rb 파일에 지정된 경우에만 작동합니다. 개발자가 어딘가에 필요한 경우 레이크 젬이 작동하지 않습니다.
John Hyland

(또는 RAILS_ENV에 따라 config / environments / * 파일 중 하나에 있습니다.)
John Hyland

2
목록을 필터링하려면 다음을 수행하십시오 bundle show | grep gem_name. 나침반 예 :bundle show | grep compass
Adam Waite

따라서 bundle show를 입력하고 "rails 2.3.17) 버전이 포함 된 Gems를 얻고 rake gems를 입력하면 전설 (I = Installed 등)처럼 보이지만 보석이없는 것은 무엇을 의미합니까 / 버전이 있습니까? 레일 버전 2가 있습니까? 레일 버전 2와 고급 번 들러가 있습니까? 이것이 좋거나 나쁩니 까? (예, 그런 오래된 버전의 레일을 사용하는 것이 나쁘다는 것을 알고 있습니다. (만약 있다면) 레일과 번 들러가 일치하지 않는 것은 치명적입니다.
Brenda J. Butler

39

번 들러를 사용하는 경우 다음에서 버전을 가져올 수 있습니다.

bundle show [gemname]

내가 이동하는 것을 시도하고 있기 때문에이 질문에 온 (Heroku가 지금이 필요하기 때문에, 또한 아마 많은 사람들이) 들러
GreenAsJade

더 이상 사용되지 않습니다. bundle info [gemname]대신 사용하십시오 .
collimarco

37

이 정보를 찾고 분류하는 데 예상보다 오래 걸렸기 때문에 다른 사람들이 볼 수 있도록 여기에 게시하고 싶었습니다. 또한 Rails 3에 대해 이것을 약간 명확히하고 싶었습니다.

  • 스크립트 / 정보가 rake about 세부 정보 로 대체되었습니다 . here . Rails 3의 모든 커맨드 라인 변경 사항에 관심이 있다면 여기 에서 찾을 수 있습니다 .

  • rake gems Rails 3에서는 작동하지 않습니다. 대신 bundle show

예를 들어, 모든 버전의 gem을 파일에 저장하여 볼 수 있습니다.

gem list > all_gems.txt

Rails 앱이 다음과 함께 사용중인 버전을 확인할 수 있습니다.

bundle show > project_gems.txt

Vim과 같은 편집기를 사용하면 vimdiff를 사용하여 변경 사항을 쉽게 확인할 수 있습니다.


6

이를 알아내는 더 직접적인 방법이있을 수 있지만 콘솔을로드하고 다음과 같은 특정 버전이 필요한 경우 :

gem 'RedCloth', '3.0.4'

이미 활성화 된 버전을 알려줍니다.

=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2

6

터미널에서

  bundle show <gem-name>
  bundle show | grep <gem-name>

또는

  gem list | grep <gem-name>

예를 들면 :

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

또한 목록이 있습니다 Gemfile.lock앱의 루트 디렉토리에있는 있습니다.

이런 이유로 나는 Gemfile.lock.gitignore. 에서 gem 버전을 지정하는 것을 잊었을 때 두 번 이상 저를 구했고 GemFilegem이 주요 변경 사항으로 업데이트되었습니다.


4

을 사용해보십시오 script/about. 당신 config/environment.rb도 그것에 대한 정보를 가지고 있습니다.

당신에 config/environment.rb당신은 어떤 특정의 버전을 지정할 수 있습니다 gem응용 프로그램을 사용해야합니다. 그러나 gem시스템에 여러 버전의 버전이 설치되어 있고 버전을 지정하지 않으면 해당 gem의 최신 버전이 응용 프로그램에서 사용됩니다.


3
gem list <gemname>

일치하는 모든 보석이 표시됩니다.

gem list rack

그러면 출력은 다음과 같습니다.

*** LOCAL GEMS ***

rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)

2

script/about사용중인 핵심 Rails 및 Rack gem의 버전이 무엇인지 알려줄 것입니다. 이상적으로를 살펴보면 config/environment.rb다음과 같은 섹션이 있어야합니다.

# Specify gems that this application depends on and have them installed with rake gems:install
# config.gem "bj"
# config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
# config.gem "sqlite3-ruby", :lib => "sqlite3"
# config.gem "aws-s3", :lib => "aws/s3"

운 좋게도 앱 작성자는 필요한 모든 gem과 버전을 거기에 포함 시켰을 것입니다. 그러나 버전은이 파일에서 선택 사항이며 궁극적으로 경험이없는 개발자가require 'rubygems'; require 'some_random_thing' 주어진 파일의 맨 위에 를 없습니다.

gem이 필요하지만 버전이 지정되지 않은 경우 입력 gem list하여 시스템에있는 모든 gem의 모든 버전을 볼 수 있습니다 . 기본적으로 사용 가능한 최신 버전을 사용합니다.


스크립트 / 정보가 보석에 대해 알려 줍니까? Mine은 내가 사용하는 루비, 레일 및 환경의 버전을 알려줍니다.
BJ Clark

맞습니다. Rails (및 Rack)는 둘 다 보석이며 script / about은 핵심 Rails 항목 (ActiveSupport 등)과 함께 실행중인 버전을 알려 주지만 다른 보석에 대해서는 알려주지 않습니다. 명확하지 않다면 죄송합니다.
John Hyland

1
bundle exec gem which gem_name

아마도 사용할 수 있습니다.

$ bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb

전 세계적으로 설치된 gem의 어떤 버전이 임의의 폴더에서 실행되고 있는지에 대한 정보를 찾고 있었는데 이로 인해 올바른 솔루션이라고 생각되는 것이 gem which gem_name
었습니다.

1

bundle show gemname Ie for devise for devise to write like

bundle show devise

현재 gem 버전을 출력합니다.


0

지역 보석을 위해 이것을 시도하십시오 :

gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

번들을 사용하는 경우 :

bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

0

최신 버전에서 사용 bundle show gem_name

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`

0

번 들러를 사용하는 경우 다음을 사용하여 버전을 가져올 수 있습니다.

bundle info [gemname]

-8

Gemfile에는 답이 있습니다.

gem 'rails', '4.0.0.rc1'

2
Gemfile항상 명시 적으로 버전 번호를 선언하지는 않습니다.
Tass 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.