Подтвердить что ты не робот

Почему "bundle install" - это драгоценный камень вместо "gem install" для приложения rails 3?

Я начинающий программист, проходящий через railstutorial от michael hartl и замечаю, что процесс использования драгоценных камней в приложении добавив его в gemfile, а затем выполнив:

$ bundle install

Любая причина, по которой вы не просто выполните:

$ [sudo] gem install [the_gem]

а затем просто добавьте его в файл Gem? Я знаю, что это был некоторый процесс назад в рельсах 2.

Спасибо!

4b9b3361

Ответ 1

Использование связки вместо команды gem для непосредственной установки ваших драгоценных камней дает вам массу преимуществ.

В этом конкретном случае, когда вы предлагаете использовать команду gem для установки и добавления ее позже в Gemfile, поставщик будет разрешать все зависимости для вас при установке драгоценного камня, который вам, возможно, придется вручную разрешить иначе.

Чтобы дать вам пример, допустим следующие зависимости:

sunspot_rails
  nokogiri (>= 1.2.0)

webrat
  nokogiri (>= 1.3) 

Как драгоценные камни webrat, так и sunspot_rails требуют разных версий nokogiri в качестве зависимости. Если вы просто используете команду gem для их установки, она может установить обе версии nokogiri или хуже жаловаться на конфликты версий. Bundler будет достаточно мудрым, чтобы разрешить этот конфликт зависимости и установить правильную версию (скажем nokogiri 1.3) и сделать оба sunspot_rails и webrat счастливыми!

Извините за длинное объяснение. Но, надеюсь, вы понимаете!:)

И, кстати, вы должны посмотреть на этот файл Gemfile.lock, чтобы узнать, что связка делает за кулисами для вас.

Ответ 2

В Gemfile вы можете убедиться, что другие разработчики, работающие в вашем приложении, имеют одну и ту же версию каждого драгоценного камня. Это также гарантирует, что вы не поместили другой [the_gem] в свой gem commmand из того, что у вас есть в вашем Gemfile.

Ответ 3

Некоторые комбинации драгоценных камней имеют смысл только в определенных условиях - например, определенный db в развитии и другой в производстве.

Gemfile - это запись того, что нужно вашему приложению в каждой среде, и bundle install устанавливает именно то, что необходимо, заботясь о зависимостях.

Если какой-либо из драгоценных камней в вашем Gemfile уже установлен в вашем текущем gemset (через gem install), тогда поставщик будет просто использовать их (а не переустанавливать их).