Я исследую приложение rails - на сервере prod установлены две версии определенного драгоценного камня, как я могу узнать, какую версию использует приложение prod?
Я исследую приложение rails - на сервере prod установлены две версии определенного драгоценного камня, как я могу узнать, какую версию использует приложение prod?
Ответы:
В Rails 3 и Rails 4 используйте bundle show
В Rails 2 rake gems
распечатает, какие гемы, зависимости и версии установлены, заморожены и т. Д.
bundle show | grep gem_name
, например, для компаса:bundle show | grep compass
Если вы используете бандлер, вы можете получить версию из
bundle show [gemname]
bundle info [gemname]
Вместо этого используйте .
На поиск и сортировку этой информации у меня ушло больше времени, чем ожидалось, поэтому я хотел разместить ее здесь в одном месте, чтобы другие могли ее просмотреть. Я также хотел немного прояснить это для 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 для просмотра изменений.
Вероятно, есть более прямой способ узнать это, но если вы загружаете консоль и нуждаетесь в конкретной версии, например:
gem 'RedCloth', '3.0.4'
Он скажет вам, какая версия уже активирована:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
Попробуйте использовать 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'; require 'some_random_thing'
в начале любого данного файла.
Если вы видите, что требуется гем, но версия не указана, вы можете ввести, gem list
чтобы увидеть все версии всех драгоценных камней в системе. По умолчанию будет использоваться последняя доступная версия.
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
bundle show gemname Т.е. для разработки нужно писать как
bundle show devise
и он распечатает текущую версию драгоценного камня.
попробуйте это для местного самоцвета:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Если вы используете пакет:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Если вы используете бандлер, вы можете получить версию, используя:
bundle info [gemname]