Обход бандлера для вспомогательных гемов разработки - PullRequest
8 голосов
/ 23 апреля 2011

В Gemfile моего проекта на Rails у меня появляются вспомогательные гемы, такие как "ruby-debug19", "perftools.rb" или "irbtools". Все это на самом деле не имеет ничего общего с проектом, а скорее является частью моей локальной настройки разработки. Но так как я использую bundler, я не могу загрузить эти гемы (даже если они установлены для всей системы), пока я не добавлю их в Gemfile. На мой взгляд, это немного запах кода.

Например, я хотел бы иметь возможность require 'irbtools' в rails console без добавления "irbtools" в мой Gemfile.

Есть ли способ сохранить вспомогательные гемы в Gemfile и при этом иметь возможность загружать их для отладки, профилирования и т. Д., Когда они мне нужны?

Ответы [ 4 ]

3 голосов
/ 19 декабря 2012

Благодаря этому посту У меня есть отличное решение.

  1. Добавьте эту строку в конец вашего Gemfile:

    eval(File.read(File.dirname(__FILE__) + '/Gemfile.local'), binding) rescue nil
    
  2. Создайте файл с именем Gemfile.local.

  3. Добавьте ваши гемы разработки в Gemfile local. Например:

    group :development do
      gem 'cucumber'
    end
    
  4. Добавить Gemfile.local в .gitignore.

Теперь вы можете добавлять свои вспомогательные камни разработки, не меняя Gemfile для других людей в команде. Очень круто.

3 голосов
/ 23 апреля 2011

На самом деле, вы можете создать group в вас Gemfile вроде:

group :auxiliary do
  gem 'irbtools'
end

А затем используйте bundle install --without auxiliary, если вы не хотите использовать irbtools. Почему вы думаете, что добавление их к Gemfile является запахом кода? И если это возможно сделать без добавления драгоценных камней в Gemfile, я думаю, будет гораздо больше кода.

2 голосов
/ 24 февраля 2012

Я поместил приведенный ниже код в файл в корне моего приложения, поэтому его легко загрузить с irb.

Если вы хотите что-то вроде сервера rails, вам, вероятно, нужно добавить load заявление в environments/development.rb и т. Д. Это по-прежнему создает проблемы, если вы случайно отметили это, но это менее раздражает, чем добавление его в Gemfile и изменение вашего Gemfile.lock.

# Example usage:
#   add_more_gems("ruby-debug-base19-0.11.26", "linecache19-0.5.13")
# or
#   add_more_gems(%w(ruby-debug-base19-0.11.26 linecache19-0.5.13))
#
# Note that you are responsible for:
# - adding all gem dependencies manually
# - making sure manually-added gem versions don't conflict with Gemfile.lock
# To list deps, run e.g. "gem dep ruby-debug-base19 -v 0.11.26"
#
def add_more_gems(*gem_names_and_vers)
  gem_names_and_vers.flatten!
  gem_base = File.expand_path(Gem.dir)

  gem_names_and_vers.each do |gem_name_and_ver|
    # uncomment if desired
    ###puts "Adding lib paths for #{gem_name_and_ver.inspect}"
    spec_file = File.join(gem_base, 'specifications', "#{gem_name_and_ver}.gemspec")
    spec = Gem::Specification.load spec_file
    this_gem_dir = File.join(gem_base, 'gems', gem_name_and_ver)
    spec.require_paths.each {|path| 
      dir_to_add = File.join(this_gem_dir, path)
      $: << dir_to_add  unless $:.member?(dir_to_add)
    }
  end
end

# put your often-used gems here
add_more_gems(
  %w(
    ruby-debug-base19-0.11.26
    ruby-debug-ide19-0.4.12
    linecache19-0.5.13
  )
)
0 голосов
/ 19 мая 2011

Не уверен, что это сработает для вас. Это зависит от того, используете ли вы RVM или нет. Если да, то вы можете установить эти вспомогательные гемы в набор гемов @global, который создается автоматически для каждого интерпретатора Ruby. Драгоценные камни в наборе @global доступны по умолчанию для всех специфических для проекта наборов гемс. Таким образом, вам не нужно загромождать свои Gemfiles.

...