Я изучаю приложение rails - на сервере prod есть две версии определенного набора gem, как я могу определить, какую версию использует приложение prod?
Как определить, какая версия жемчужины использует приложение rails
Ответ 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'