Як сказати, яку версію дорогоцінного каміння використовує рейковий додаток


116

Я досліджую рейковий додаток - на сервері prod встановлена ​​дві версії певного каменя, як я можу сказати, яку версію використовує додаток prod?


Ви запитуєте, яка версія рейок чи яка інша версія коштовного каменю?
BJ Clark

1
Яка версія конкретного самоцвіту.
Стів Брюер

У мене заморожений дорогоцінний камінь під постачальниками / дорогоцінними каменями, а потім встановлено новішу версію дорогоцінного каменю, встановлену в місці розташування дорогоцінних каменів за замовчуванням. Я шукаю щось із рейок, на якому написано: "Я завантажив цей камінь із цього місця".
Стів Брюер

Відповіді:


172

У рейках 3 та рейки 4 використовуйте bundle show

У Rails 2 rake gemsбуде надруковано, які дорогоцінні камені, залежності та версії встановлені, заморожені тощо.


2
Це буде працювати лише в тому випадку, якщо дорогоцінний камінь, як зазначено у файлі Environment.rb. Якщо розробник просто вимагав цього десь, дорогоцінні камені не працюватимуть.
Джон Гіланд

(Або в одному з файлів config / середовища / *, залежно від вашого RAILS_ENV.)
Джон Хайланд,

2
Якщо ви хочете відфільтрувати список, зробіть bundle show | grep gem_name, наприклад, компас:bundle show | grep compass
Adam Waite

Отже, що це означає, коли ви набираєте пакетне шоу і отримуєте купу дорогоцінних каменів з версіями, включаючи "рейлики 2.3.17), і ви вводите граблі у дорогоцінні камені, і ви отримуєте те, що схоже на легенду (I = встановлено тощо), але немає дорогоцінних каменів / версії? Чи є у мене рейки версії 2 чи ні? Можливо, у мене рейки версії 2 та більш просунутий постачальник? Це добре / погано? (Так, я знаю, що погано мати таку стару версію рейок, я хочу знати, чи катастрофічно мати такі невідповідні (якщо вони є) рейки та пачку)
Бренда Дж. Батлер

39

Якщо ви використовуєте пакет, тоді ви можете отримати версію

bundle show [gemname]

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

Це застаріло. Використовуйте bundle info [gemname]замість цього.
колимарко

37

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


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щоб переглянути всі версії всіх дорогоцінних каменів у системі. За замовчуванням він буде використовувати найновіший доступний.


Чи говорить ваш сценарій / про вас про дорогоцінні камені? Шахта мені просто розповідає, яку версію рубіну, рейок та навколишнього середовища я використовую.
BJ Clark

Правильно, Rails (і Rack) є обома дорогоцінними каменями, а сценарій / 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
cori

1

пакет вказувати 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]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.