Cách biết phiên bản gem mà ứng dụng rails đang sử dụng


116

Tôi đang điều tra một ứng dụng rails - máy chủ prod có hai phiên bản của một viên ngọc cụ thể được cài đặt, làm cách nào tôi có thể biết ứng dụng prod đang sử dụng phiên bản nào?


Bạn đang hỏi phiên bản nào của đường ray, hoặc phiên bản nào của một số viên ngọc khác?
BJ Clark

1
Phiên bản nào của một viên ngọc cụ thể.
Steve Brewer

Tôi có một viên đá quý bị đóng băng theo nhà cung cấp / đá quý và sau đó có một phiên bản đá quý mới hơn được cài đặt ở vị trí đá quý mặc định. Tôi đang tìm kiếm thứ gì đó từ đường ray cho biết "Tôi đã nạp viên ngọc này từ vị trí này".
Steve Brewer

Câu trả lời:


172

Trong Rails 3 và Rails 4, sử dụng bundle show

Trong Rails 2, rake gemssẽ in ra những viên đá quý, phần phụ thuộc và phiên bản nào được cài đặt, đóng băng, v.v.


2
Điều này sẽ chỉ hoạt động nếu đá quý như được chỉ định trong tệp môi trường.rb. Nếu nhà phát triển chỉ yêu cầu nó ở đâu đó, thì những viên ngọc cào sẽ không hoạt động.
John Hyland

(Hoặc một trong các config / môi trường / * tác phẩm, tùy thuộc vào RAILS_ENV của bạn.)
John Hyland

2
Nếu bạn muốn lọc danh sách làm bundle show | grep gem_name, ví dụ cho la bàn:bundle show | grep compass
Adam Waite

Vì vậy, điều đó có nghĩa là gì khi bạn nhập gói chương trình và bạn nhận được một loạt Đá quý với các phiên bản bao gồm "rails 2.3.17) và bạn nhập đá quý rake và bạn nhận được thứ trông giống như một huyền thoại (I = Installed, v.v.) nhưng không có đá quý / phiên bản? Tôi có phiên bản rails 2 hay không? Có lẽ tôi có phiên bản rails 2 và một gói nâng cao hơn? Điều này tốt / xấu? (Vâng, tôi biết thật tệ khi có một phiên bản rails cũ như vậy, tôi muốn biết nếu đó là thảm họa để có một ví dụ mismatched (nếu nó là) đường ray và bundler).
Brenda J. Butler

39

Nếu bạn sử dụng gói, thì bạn có thể tải phiên bản từ

bundle show [gemname]

Tôi đến câu hỏi này bởi vì tôi đang cố gắng để di chuyển đến bundler (có lẽ nhiều người cũng vì Heroku hiện yêu cầu này)
GreenAsJade

Điều này không được dùng nữa. Sử dụng bundle info [gemname]thay thế.
collimarco

37

Tôi mất nhiều thời gian hơn dự kiến ​​để tìm và sắp xếp thông tin này nên tôi muốn đăng nó ở đây ở một nơi để người khác xem. Tôi cũng muốn làm rõ điều này một chút cho Rails 3:

  • script / about đã được thay thế bằng rake about Chi tiết ở đây . Nếu bạn quan tâm, bạn có thể tìm thấy danh sách tất cả các thay đổi dòng lệnh cho Rails 3 tại đây .

  • rake gems không hoạt động trong Rails 3. Thay vào đó bạn nên sử dụng bundle show

Ví dụ: bạn có thể lưu tất cả các phiên bản đá quý của mình vào một tệp để xem với:

gem list > all_gems.txt

và bạn có thể xem ứng dụng Rails của mình đang sử dụng phiên bản nào:

bundle show > project_gems.txt

Sử dụng một trình soạn thảo như Vim, bạn có thể dễ dàng sử dụng vimdiff để xem các thay đổi


6

Có thể có một cách trực tiếp hơn để tìm ra điều này, nhưng nếu bạn tải lên bảng điều khiển và yêu cầu một phiên bản cụ thể như vậy:

gem 'RedCloth', '3.0.4'

Nó sẽ cho bạn biết phiên bản nào đã được kích hoạt:

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

6

Trong ga cuối

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

hoặc là

  gem list | grep <gem-name>

Ví dụ:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

Cũng có một danh sách trong Gemfile.lock , nằm trong thư mục gốc của ứng dụng của bạn.

Vì lý do này, tôi rời Gemfile.lockkhỏi của tôi .gitignore. Điều này đã cứu tôi nhiều lần khi tôi quên chỉ định phiên bản đá quý GemFilevà một viên ngọc được cập nhật với những thay đổi đột phá.


4

Hãy thử sử dụng script/about. Của bạn config/environment.rbcũng có thông tin về nó.

Trong của config/environment.rbbạn, bạn có thể chỉ định phiên bản của một gemứng dụng cụ thể nên sử dụng. Tuy nhiên, nếu bạn đã gemcài đặt nhiều phiên bản của một phần mềm và bạn không chỉ định phiên bản, thì phiên bản mới nhất của viên ngọc đó sẽ được ứng dụng sử dụng.


3
gem list <gemname>

Nó sẽ hiển thị tất cả các viên ngọc phù hợp, ví dụ như nếu một số

gem list rack

Sau đó, đầu ra thứ sẽ như sau

*** LOCAL GEMS ***

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

2

script/aboutsẽ cho bạn biết phiên bản của đá quý Rails và Rack cốt lõi mà bạn đang sử dụng, chứ không phải bất cứ thứ gì khác. Tốt nhất, nếu bạn nhìn vào config/environment.rb, sẽ có một phần giống như sau:

# 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"

Với bất kỳ may mắn nào, tác giả của ứng dụng sẽ đưa vào bất kỳ phiên bản và đá quý cần thiết nào ở đó. Tuy nhiên, các phiên bản là tùy chọn trong tệp này và cuối cùng không có gì ngăn cản một nhà phát triển thiếu kinh nghiệm chỉ cần nhấn vào require 'rubygems'; require 'some_random_thing'đầu của bất kỳ tệp nhất định nào.

Nếu bạn thấy rằng một loại đá quý đang được yêu cầu, nhưng không có phiên bản nào được chỉ định, bạn có thể nhập gem listđể xem tất cả các phiên bản của tất cả các loại đá quý trên hệ thống. Theo mặc định, nó sẽ sử dụng cái mới nhất có sẵn.


Kịch bản / giới thiệu của bạn có cho bạn biết về đá quý không? Tôi chỉ cho tôi biết tôi đang sử dụng phiên bản ruby, đường ray và môi trường nào.
BJ Clark

Đúng vậy, Rails (và Rack) đều là đá quý và script / about sẽ cho bạn biết phiên bản nào của chúng đang chạy, cùng với nội dung cốt lõi của Rails (ActiveSupport, v.v.) nhưng nó sẽ không cho bạn biết về bất kỳ viên ngọc nào khác. Xin lỗi nếu điều đó không rõ ràng.
John Hyland

1
bundle exec gem which gem_name

Có lẽ là những gì bạn có thể sử dụng:

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

Tôi đang tìm kiếm thông tin về phiên bản của một viên ngọc được cài đặt toàn cầu đang được thực thi trong một thư mục tùy ý và điều này dẫn tôi đến điều tôi tin là giải pháp chính xác -gem which gem_name
cori

1

gói hiển thị gemname Tức là để phát triển bạn phải viết như thế

bundle show devise

và nó sẽ in ra phiên bản đá quý hiện tại.


0

thử cái này cho đá quý địa phương:

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

Nếu bạn sử dụng gói:

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

0

Trong phiên bản mới hơn, đã sử dụng bundle show gem_name

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

0

Nếu bạn sử dụng gói, thì bạn có thể tải phiên bản bằng cách sử dụng:

bundle info [gemname]

-8

Trong Gemfile, sẽ có câu trả lời:

gem 'rails', '4.0.0.rc1'

2
Gemfilekhông phải lúc nào cũng khai báo rõ ràng số phiên bản.
Tass
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.