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?
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?
Câu trả lời:
Trong Rails 3 và Rails 4, sử dụng bundle show
Trong Rails 2, rake gems
sẽ 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.
bundle show | grep gem_name
, ví dụ cho la bàn:bundle show | grep compass
Nếu bạn sử dụng gói, thì bạn có thể tải phiên bản từ
bundle show [gemname]
bundle info [gemname]
thay thế.
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
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
Hãy thử sử dụng script/about
. Của bạn config/environment.rb
cũng có thông tin về nó.
Trong của config/environment.rb
bạ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 đã gem
cà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.
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)
script/about
sẽ 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.
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
gem which gem_name
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.
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|$)'
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]