Как определить, какую версию gem использует приложение rails

StackOverflow https://stackoverflow.com/questions/1621405

  •  06-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

bundle show [gemname]

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

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

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

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

gem list > all_gems.txt

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

bundle show > project_gems.txt

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

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

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 . Это спасло меня не раз, когда я забыл указать версию гема в 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 должно использовать приложение. Однако если на вашем компьютере установлено несколько версий 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 скажет вам, какие версии базовых гемов 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'; требует 'some_random_thing' в верхней части любого файла.

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

bundle exec gem which gem_name

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

<*>#8250; 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|$)'

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

bundle show devise

и распечатает текущую версию гема.

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

gem 'rails', '4.0.0.rc1'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top