2009-10-25 37 views
103

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

+0

Bạn có yêu cầu phiên bản nào của đường ray, hoặc phiên bản nào của một số đá quý khác? –

+1

Phiên bản của một viên ngọc cụ thể. –

+0

Tôi có một viên đá quý đông lạnh dưới các nhà cung cấp/đá quý, và sau đó có một phiên bản mới hơn của đá quý được cài đặt trong vị trí đá quý mặc định. Tôi đang tìm kiếm từ một cái gì đó từ đường ray nói rằng "Tôi nạp đá quý này từ vị trí này". –

Trả lời

148

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

Trong Rails 2, rake gems sẽ in ra những gì đá quý, phụ thuộc, và các phiên bản được cài đặt, đông lạnh vv

+2

Điều này sẽ chỉ hoạt động nếu đá quý được chỉ định trong tệp environment.rb. Nếu nhà phát triển chỉ yêu cầu nó ở đâu đó, đá quý sẽ không hoạt động. –

+0

(Hoặc trong một trong các tệp cấu hình/môi trường/*, tùy thuộc vào RAILS_ENV của bạn.) –

+2

Nếu bạn muốn lọc danh sách, hãy thực hiện 'bundle show | grep gem_name', ví dụ cho la bàn: 'bundle show | grep compass' –

4

Thử sử dụng script/about. config/environment.rb của bạn cũng có thông tin về nó.

Trong số config/environment.rb bạn có thể chỉ định phiên bản của ứng dụng gem cụ thể sẽ sử dụng. Tuy nhiên nếu bạn có nhiều phiên bản của gem được cài đặt trên máy của mình và bạn không chỉ định phiên bản, phiên bản mới nhất của đá quý đó sẽ được ứng dụng sử dụng.

5

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

gem 'RedCloth', '3.0.4' 

Nó sẽ cho bạn biết những gì phiên bản đã được kích hoạt:

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

script/about sẽ cho bạn biết bạn đang sử dụng phiên bản nào của Rails và Đá quý cốt lõi mà không sử dụng bất kỳ thứ gì khác. Lý tưởng nhất, nếu bạn nhìn vào config/environment.rb, cần có một phần đó trông như thế này:

# 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, tác giả của ứng dụng sẽ đã bao gồm bất kỳ đá quý theo yêu cầu và các phiên bản đó. Tuy nhiên, các phiên bản là tùy chọn trong tập tin 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ỉ tát một số require 'rubygems'; require 'some_random_thing' ở đầu bất kỳ tệp nào đã cho.

Nếu bạn thấy đá quý là bắt buộc, 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 đá quý trên hệ thống. Theo mặc định, nó sẽ sử dụng phiên bản mới nhất hiện có.

+0

Kịch bản của bạn có nói về đá quý không? Tôi chỉ nói với tôi phiên bản ruby, đường ray và môi trường mà tôi đang sử dụng. –

+0

đường ray là đá quý ... –

+0

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

33

Nếu bạn sử dụng bundler, sau đó bạn có thể nhận phiên bản từ

bundle show [gemname] 
+0

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

36

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 vì vậy tôi muốn đăng ở đây để một 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/về đã được thay thế bằng rake about Các chi tiết có here. Nếu bạn quan tâm một danh sách tất cả các thay đổi dòng lệnh cho Rails 3, chúng có thể được tìm thấy here.

  • 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 của đá quý của bạn vào một tập tin để xem với:

gem list > all_gems.txt

và bạn có thể xem những gì các phiên bản ứng dụng Rails của bạn là sử dụng với:

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 se e các thay đổi

5

Ngoài ra còn 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 để lại Gemfile.lock trong số .gitignore. Điều này đã lưu lại cho tôi nhiều lần khi tôi quên chỉ định phiên bản đá quý trong GemFile và một gem được cập nhật với các thay đổi đột phá.

-8

Trong Gemfile, cần có câu trả lời:

gem 'rails', '4.0.0.rc1' 
+2

'Gemfile' sẽ không luôn khai báo rõ ràng một số phiên bản. – Tass

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/[email protected]/gems/railties-4.1.7/lib/rails.rb 
+0

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 trên toàn cầu đang được thực hiện trong một thư mục tùy ý và điều này dẫn tôi đến những gì tôi tin là giải pháp đúng - "gem gem_name' – cori

6

Trong nhà ga

gem list | grep xxx 

hoặc

bundle show | grep xxx 

xxx nên được thay thế như tên đá quý bạn sẽ xem xét

3
gem list <gemname> 

Nó sẽ hiển thị tất cả các đá quý phù hợp ví dụ như nếu một số một làm

gem list rack 

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

*** LOCAL GEMS *** 

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

thử cái này cho đá quý cục bộ:

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|$)' 
Các vấn đề liên quan