Как определить, какая версия жемчужины использует приложение rails

Я изучаю приложение rails - на сервере prod есть две версии определенного набора gem, как я могу определить, какую версию использует приложение prod?

Ответ 1

В Rails 3 и Rails 4 используйте bundle show

В Rails 2 rake gems будет печатать, какие камни, зависимости и версии установлены, заморожены и т.д.

Ответ 2

Если вы используете bundler, вы можете получить версию из

bundle show [gemname]

Ответ 3

Мне потребовалось больше времени, чем ожидалось, чтобы найти и отсортировать эту информацию, поэтому я хотел бы разместить ее здесь в одном месте для просмотра другими. Я также хотел немного разъяснить это для Rails 3:

  • script/about заменен на rake about Подробности здесь. Если вам интересен список всех изменений в командной строке для Rails 3, они могут быть найдены здесь.

  • rake gems не работает в Rails 3. Вместо этого вы должны использовать bundle show

В качестве примера вы можете сохранить все версии ваших драгоценных камней в файл для просмотра с помощью:

gem list > all_gems.txt

и вы можете увидеть, какие версии использует ваше приложение Rails:

bundle show > project_gems.txt

Используя редактор, такой как Vim, вы можете легко использовать vimdiff, чтобы увидеть изменения

Ответ 4

В терминале

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

или же

gem list | grep [gem-name]

[имя-драгоценного камня] следует заменить на имя драгоценного камня, которое вы будете искать.

Ответ 5

Вероятно, существует более прямой способ найти это, но если вы загружаете консоль и требуете определенной версии:

gem 'RedCloth', '3.0.4'

Он скажет вам, какая версия уже активирована:

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

Ответ 6

Также есть список в Gemfile.lock, расположенный в корневом каталоге вашего приложения.

По этой причине я оставляю Gemfile.lock из моего .gitignore. Это спасло меня более одного раза, когда я забыл указать версию gem в GemFile, и камень был обновлен с нарушением изменений.

Ответ 7

Попробуйте использовать script/about. Ваш config/environment.rb также содержит информацию об этом.

В вашем config/environment.rb вы можете указать, какая версия конкретного gem должна использовать приложение. Однако, если на вашем компьютере установлено несколько версий gem, и вы не укажете версию, последняя версия этого драгоценного камня будет использована приложением.

Ответ 8

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)

Ответ 9

script/about расскажет вам, какие версии ячеек Rails и Rack вы используете, но не что-то еще. В идеале, если вы посмотрите в 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' в верхней части любого заданного файла.

Если вы видите, что требуется камень, но не указана версия, вы можете ввести gem list, чтобы просмотреть все версии всех драгоценных камней в системе. По умолчанию будет использоваться последний доступный.

Ответ 10

bundle exec gem which gem_name

Возможно, вы можете использовать:

$› bundle exec gem which rails
/Users/xxxx/.rvm/gems/[email protected]/gems/railties-4.1.7/lib/rails.rb

Ответ 11

попробуйте это для локального жемчужины:

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

Если вы используете bundle:

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

Ответ 12

расслоение шоу gemname Т.е. для разработки вы должны написать как

bundle show devise

и он распечатает текущую версию драгоценного камня.

Ответ 13

В Gemfile должен быть ответ:

gem 'rails', '4.0.0.rc1'