Я досліджую рейковий додаток - на сервері prod встановлена дві версії певного каменя, як я можу сказати, яку версію використовує додаток prod?
Я досліджую рейковий додаток - на сервері prod встановлена дві версії певного каменя, як я можу сказати, яку версію використовує додаток prod?
Відповіді:
У рейках 3 та рейки 4 використовуйте bundle show
У Rails 2 rake gems
буде надруковано, які дорогоцінні камені, залежності та версії встановлені, заморожені тощо.
bundle show | grep gem_name
, наприклад, компас:bundle show | grep compass
Якщо ви використовуєте пакет, тоді ви можете отримати версію
bundle show [gemname]
bundle info [gemname]
замість цього.
Знайти та сортувати цю інформацію мені знадобилось більше часу, ніж очікувалося, тому я хотів розмістити її тут, в одному місці, щоб інші могли переглянути. Я також хотів трохи уточнити це для Rails 3:
скрипт / про було замінено на rake about
Деталі тут . Якщо вас цікавить список усіх змін командного рядка для Rails 3, їх можна знайти тут .
rake gems
не працює в Rails 3. Натомість ви повинні використовувати bundle show
Наприклад, ви можете зберегти всі версії ваших дорогоцінних каменів у файл для перегляду за допомогою:
gem list > all_gems.txt
і ви можете побачити, які версії використовує ваша програма Rails:
bundle show > project_gems.txt
Використовуючи такий редактор, як Vim, ви можете легко використовувати vimdiff, щоб побачити зміни
Також є список у Gemfile.lock
, розташований у кореневому каталозі вашої програми.
З цієї причини я залишаюсь Gemfile.lock
поза своїм .gitignore
. Це врятувало мене не раз, коли я забув вказати версію дорогоцінного каміння GemFile
, і дорогоцінний камінь оновлювався з порушеннями змін.
Спробуйте використовувати 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
пакет вказувати gemname, тобто для розробки вам потрібно писати як
bundle show devise
і він роздрукує поточну версію дорогоцінного каміння.
спробуйте цей для місцевого самоцвіту:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
Якщо ви використовуєте пакет:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'