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


116

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


Вы спрашиваете, какая версия рельсов или какая-то другая версия гема?
BJ Clark,

1
Какая версия того или иного драгоценного камня.
Стив Брюэр,

У меня есть драгоценный камень, замороженный в разделе vendors / gems, а затем я установил более новую версию драгоценного камня в местоположение драгоценных камней по умолчанию. Я смотрю на что-то с рельсов, на котором написано: «Я загрузил этот драгоценный камень из этого места».
Стив Брюэр,

Ответы:


173

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

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


2
Это будет работать только в том случае, если гем был указан в файле environment.rb. Если разработчику где-то это просто потребовалось, rake gems не сработает.
Джон Хайленд,

(Или в одном из файлов config / environment / *, в зависимости от вашего RAILS_ENV.)
Джон Хайленд,

2
Если вы хотите отфильтровать список, сделайте bundle show | grep gem_name, например, для компаса:bundle show | grep compass
Адам Уэйт

Итак, что это означает, когда вы набираете bundle show и получаете кучу драгоценных камней с версиями, включая "rails 2.3.17), и вы вводите rake gems, и вы получаете то, что похоже на легенду (I = установлен и т.д.), но не драгоценные камни / Версии? У меня есть rails версии 2 или нет? Может у меня есть rails версии 2 и более продвинутый бандлер? Это хорошо / плохо? (Да, я знаю, что плохо иметь такую ​​старую версию rails, я хочу знать, есть ли катастрофически иметь такие несовпадающие (если они есть) рельсы и упаковщик)
Бренда Дж. Батлер,

39

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

bundle show [gemname]

Я пришел к этому вопросу, потому что пытаюсь перейти на упаковщик (вероятно, многие люди тоже, потому что теперь этого требует Heroku)
GreenAsJade

Это устарело. bundle info [gemname]Вместо этого используйте .
collimarco

37

На поиск и сортировку этой информации у меня ушло больше времени, чем ожидалось, поэтому я хотел разместить ее здесь в одном месте, чтобы другие могли ее просмотреть. Я также хотел немного прояснить это для 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 для просмотра изменений.


6

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

gem 'RedCloth', '3.0.4'

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

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

6

В терминале

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

или

  gem list | grep <gem-name>

Например:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

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

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


4

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

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


3
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)

2

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чтобы увидеть все версии всех драгоценных камней в системе. По умолчанию будет использоваться последняя доступная версия.


Ваш сценарий / about рассказывает вам о драгоценных камнях? Мой просто говорит мне, какую версию ruby, rails и environment я использую.
BJ Clark,

Правильно, Rails (и Rack) являются драгоценными камнями, и script / about сообщит вам, какие их версии работают, вместе с основным материалом Rails (ActiveSupport и т. Д.), Но не скажет вам ни о каких других жемчужинах. Извините, если это было непонятно.
Джон Хайленд,

1
bundle exec gem which gem_name

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

$ 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
Кори

1

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

bundle show devise

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


0

попробуйте это для местного самоцвета:

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

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

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

0

В более новой версии используется bundle show gem_name

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

0

Если вы используете бандлер, вы можете получить версию, используя:

bundle info [gemname]

-8

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

gem 'rails', '4.0.0.rc1'

2
Gemfileне всегда явно объявляет номер версии.
ТАСС
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.