문제

Rails 앱을 조사하고 있습니다 - Prod 서버에는 두 개의 버전의 특정 보석이 설치되어 있습니다. Prod 앱이 어떤 버전을 사용하고 있는지 어떻게 알 수 있습니까?

도움이 되었습니까?

해결책

레일 3과 레일 4에서 사용하십시오 bundle show

레일 2에서 rake gems 보석, 종속성 및 버전이 설치되어 있는지, 동결 등을 인쇄합니다.

다른 팁

Bundler를 사용하면 버전을 얻을 수 있습니다.

bundle show [gemname]

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

  • 스크립트/에 대한 정보가 대체되었습니다 rake about 세부 사항은입니다 여기. Rails 3의 모든 명령 행 변경 목록에 관심이 있으시면 찾을 수 있습니다. 여기.

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

예를 들어, 보석의 모든 버전을 파일에 저장할 수 있습니다.

gem list > all_gems.txt

Rails 앱이 사용하는 버전을 볼 수 있습니다.

bundle show > project_gems.txt

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

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

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. 이것은 GEM 버전을 지정하는 것을 잊었을 때 두 번 이상 저를 저장했습니다. GemFile, 그리고 보석은 변경 중단으로 업데이트되었습니다.

터미널에서

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

또는

gem list | grep [gem-name]

gem-name]은 당신이 찾을 보석 이름으로 교체해야합니다.

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

당신의 config/environment.rb 특정 버전의 특정 버전을 지정할 수 있습니다 gem 응용 프로그램은 사용해야합니다. 그러나 여러 버전의 a가있는 경우 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 어떤 버전의 핵심 레일과 랙 보석을 사용하고 있지만 다른 버전은 알려줄 것입니다. 이상적으로, 당신이 바라 보는 경우 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"

운 좋게도, 앱의 저자는 필요한 보석과 버전을 포함시킬 것입니다. 그러나 버전은이 파일에서 선택 사항이며 궁극적으로 경험이없는 개발자가 a를 때리는 것을 막는 것은 없습니다. require 'rubygems'; require 'some_random_thing' 주어진 파일의 맨 위에.

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

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 list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

번들을 사용하는 경우 :

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

번들 쇼 gemname, 즉 당신이 다음과 같이 써야 할 고안을 위해

bundle show devise

그리고 현재 보석 버전을 인쇄합니다.

gemfile에는 답이 있어야합니다.

gem 'rails', '4.0.0.rc1'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top