Programing

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

crosscheck 2020. 7. 25. 10:31
반응형

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


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


Rails 3 및 Rails 4에서 bundle show

Rails 2에서는 rake gems어떤 gem, 의존성 및 버전이 설치, 고정 등을 인쇄합니다.


번 들러를 사용하면 다음에서 버전을 얻을 수 있습니다.

bundle show [gemname]

이 정보를 찾아 정렬하는 데 예상보다 오래 걸렸으므로 다른 사람들이 볼 수 있도록 여기에 한 곳에 게시하고 싶었습니다. 나는 또한 Rails 3에 대해 이것을 명확히하고 싶었습니다.

  • script / about이로 대체되었습니다 rake about. 자세한 내용은 여기에 있습니다 . Rails 3의 모든 명령 행 변경 사항에 관심이 있으시면 여기를 참조하십시오 .

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

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

gem list > all_gems.txt

Rails 앱에서 어떤 버전을 사용하고 있는지 확인할 수 있습니다.

bundle show > project_gems.txt

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


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

gem 'RedCloth', '3.0.4'

어떤 버전이 이미 활성화되어 있는지 알려줍니다.

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

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

이런 이유로 나는 Gemfile.lock.gitignore. 에서 보석 버전을 지정하는 것을 잊었을 때 보석이 두 번 이상 저장되었으며 GemFile보석이 변경 사항으로 업데이트되었습니다.


터미널에서

bundle show [gem-name]
bundle show | grep [gem-name]

또는

gem list | grep [gem-name]

[gem-name]은 찾고자하는 gem 이름으로 바꿔야합니다.


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

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


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)

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"

운이 좋으면 앱 작성자는 필요한 보석과 버전을 포함하게됩니다. 그러나이 파일에서는 버전이 선택 사항이므로 경험이없는 개발자가 require 'rubygems'; require 'some_random_thing'특정 파일의 맨 위에 있는 a 때리는 것을 막을 수있는 것은 없습니다.

If you see that a gem is being required, but no version is specified, you can type gem list to see all the versions of all the gems on the system. By default, it will be using the latest one available.


bundle exec gem which gem_name

Is probably what you can use:

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

bundle show gemname I.e for devise you have to write like

bundle show devise

and it will printout the current gem version.


try this one for local gem :

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

If you use bundle:

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

In Gemfile , there should be the answer:

gem 'rails', '4.0.0.rc1'

참고URL : https://stackoverflow.com/questions/1621405/how-to-tell-which-version-of-a-gem-a-rails-app-is-using

반응형