2014-01-04 4 views
4

Я использую RubyMine (v6.0.2), но моих товарищей по команде нет, поэтому им нужен «отладчик» в gemfile. Я могу условно не требовать Gemfile при запуске RubyMine (так что Gemfile может быть общим и идентичным), но поскольку «камень отладчика» не включен, файл Gemfile.lock изменяется в зависимости от того, был ли последний проект запущен с RubyMine или не. Это создает много шума в избыточных изменениях Gemfile.lock.RubyMine 6.0.2 с камнем «отладчика» без изменения Gemfile.lock?

Я попытался использовать самоцветов 'debugger-xml'; что не решает проблему.

Итак, как я могу запустить RubyMine 6.0.2 с помощью «отладчика» в Gemfile без изменения Gemfile.lock?

+0

Я не использовал RubyMine, что много, есть причина, почему вы не хотите иметь «отладчик» в Gemfile при работе в RubyMine? Это только потому, что оно избыточно, поскольку у вас уже есть инструменты для отладки или создается реальный конфликт? – lime

+1

Создает реальный конфликт. RubyMine использует собственные отладочные камни, которые сталкиваются с «отладчиком», и он отказывается запускаться. Деквалификация драгоценного камня (с использованием 'если ENV [' RM_INFO '] - подпись RubyMine - например, запускает RubyMine, но изменяет Gemfile.lock. – sellarafaeli

+0

Недавно попытался решить эту проблему и решил полностью удалить отладчик из Gemfile. Зачем это там вообще? –

ответ

6

Я работаю над этой проблемой с другой стороны стола. Я использую камень отладчика, но у меня есть команды, которые используют RubyMine.

Мы обсудили несколько потенциальных решений, но все они связаны с условными проверками в Gemfile, что приведет к модификации Gemfile.lock.

Я гугл вокруг для лучшего решения и нашел это SO сообщения: How to use gems not in a Gemfile when working with bundler?

Комбинируя несколько ответов там, я пришел к этому решению:

  1. Удалить отладчик камень из Gemfile.
  2. Создайте Gemfile.local с содержимым, приведенным ниже.
  3. Добавьте Gemfile.local в файл .gitignore, если используете git.
  4. Создайте функцию и псевдоним оболочки.
  5. Начало рельсы с $be rails s

как все это работает!

Bundler по умолчанию использует файл с именем Gemfile, но это поведение можно переопределить, указав переменную среды BUNDLE_GEMFILE. Bundler будет использовать/создавать файл блокировки с тем же именем, что и BUNDLE_GEMFILE.

Функция оболочки __bundle_exec_custom проверит, есть ли файл Gemfile.local в CWD. Если есть, то устанавливается и используется переменная BUNDLE_GEMFILE. В противном случае используется Gemfile по умолчанию.

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

Gemfile.local:

source "https://rubygems.org" 

gemfile = File.join(File.dirname(__FILE__), 'Gemfile') 
if File.readable?(gemfile) 
    puts "Loading #{gemfile}..." if $DEBUG 
    instance_eval(File.read(gemfile)) 
end 

gem 'debugger' 

Функция и оболочки псевдоним:

__bundle_exec_custom() { 
    if [ -f Gemfile.local ] 
    then 
    BUNDLE_GEMFILE="Gemfile.local" bundle exec [email protected] 
    else 
    bundle exec [email protected] 
    fi 
} 

# Rails aliases 
alias be='__bundle_exec_custom' 
+1

Мне нравится ваше решение. Благодаря! –

3

Я думаю, что нашел. По-видимому, RubyMine не очень хорошо справляется с камнем debugger, который требуется в приложении Rails, но не имеет проблемы с тем, что только что установленный драгоценный камень.

Раствор затем должен включать драгоценный камень в Gemfile (и Gemfile.lock) , но только require ее пределами RubyMine.

gem 'debugger', {group: [:test, :development]}. 
    merge(ENV['RM_INFO'] ? {require: false} : {}) 

Приведенный выше код от this comment on the JetBrains bug tracker, через this comment on a similar question.

Он проверяет наличие переменной окружения RM_INFO, заданной RubyMine. Важно то, что это влияет только на то, является ли драгоценный камень required и, следовательно, он не должен изменять Gemfile.lock между установками.

+1

Это направление, которое я ищу, но, к сожалению, кажется, что RubyMine по-прежнему изменяет Gemfile.lock при запуске, даже если он не требует отладки. – sellarafaeli

+0

Что такое 'diff' в Gemfile.lock между запуском в RubyMine и за его пределами? – lime

+0

При использовании RubyMine он не включает в себя «отладчик» и его зависимости (pry-debugger и т. Д.), Которые включены (и в Gemfile.lock) при работе без RubyMine. – sellarafaeli

2

я, возможно, даже лучше решение, которое, кажется, работает для меня в моей Rails 4 приложения ...

В своем Gemfile переместите все связанные с отладкой драгоценные камни в свою собственную группу, так как su ч:

group :pry do 
    gem 'pry', '>= 0.10.0' 
    gem 'pry-debugger', '>= 0.2.3' 
    gem 'pry-highlight', '>= 0.0.1' 
end 

В config/application.rb вы находку что-то вроде следующего:

# Require the gems listed in Gemfile, including any gems 
# you've limited to :test, :development, or :production. 
Bundler.require(*Rails.groups) 

Добавьте следующий раз ниже:

Bundler.require(:pry) unless ENV['RM_INFO'] || Rails.env.production? 

Вы можете изменить unless условия для удовлетворяют ваши потребности, но важная часть заключается в том, что RubyMine установит RM_INFO, который вы можете использовать для обнаружения и, следовательно, исключения из драгоценных камней.

Это устранит эффект пинг-понга в RubyMine по сравнению с командной строкой, поэтому это должно хорошо работать в команде с смешанной IDE.

последнее замечание, если вы устанавливаете на Heroku, вы можете исключить :pry группы из устанавливаемых на развёртывании:

$ heroku config:set BUNDLE_WITHOUT="development:test:pry" 
+0

благодарит @lime за указание, что RubyMine не против установки драгоценных камней ... это был ключ –

 Смежные вопросы

  • Нет связанных вопросов^_^