Как добавить pry при разработке драгоценного камня Ruby

У меня есть драгоценный камень под названием «что-то».

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

Если у меня есть «требовать что-то» внутри lib/something.rb , когда я выпускаю драгоценный камень, он выдает ошибку LoadError, потому что pry — это только зависимость разработки.

В то же время я не хочу продолжать добавлять и удалять pry, когда я делаю коммит кода.

Каков наилучший способ потребовать pry только при разработке приложения, но не требовать его в качестве зависимости для драгоценного камня?


person Anton Evangelatov    schedule 20.08.2013    source источник
comment
Аналогичный вопрос, но нет ответа: stackoverflow.com/questions/18109735/   -  person Anton Evangelatov    schedule 20.08.2013
comment
Возможно, подумайте, в каком контексте вы выполняете код, который требует доступа. Если это из спецификаций, поместите требование в spec_helper.rb (или эквивалент). Если это из задачи rake, поместите ее в файл Rakefile. Если это из необработанного скрипта, поместите туда требование или загрузите его из аргументов командной строки с помощью ruby -rpry   -  person Abe Voelker    schedule 20.08.2013


Ответы (2)


Вы можете использовать add_development_dependency в файле gemspec. Вам все равно придется require вставить его в файл lib/something.rb в блоке begin .. rescue LoadError. (Редактировать 2, см. ниже)

В вашем случае это будет примерно так:

spec.add_development_dependency 'pry', '~> 0.9.12.2'

Целью add_development_dependency является разделение гемов на зависимости, которые устанавливаются при выполнении gem install mygem, и зависимости только для разработки, которые устанавливаются только при выполнении gem install mygem --development.

Изменить: решение @Pierre-Louis Gottfrois

Измените Gemfile напрямую и добавьте группу test. Этот вопрос описывает процесс. Согласно Иегуда Кац.

Изменить 2: begin require ... rescue LoadError, по-видимому, является обычной практикой для скриптов Ruby, согласно этой статье Создание Ruby Gems .

person Community    schedule 20.08.2013
comment
Это отлично работает, и это правильный путь, однако он не будет работать в тестовой среде. Вам нужно будет добавить драгоценный камень в группу test непосредственно в Gemfile. - person Pierre-Louis Gottfrois; 20.08.2013
comment
Однако позже, когда я выпускаю драгоценный камень в производство, у меня все еще есть это require pry в lib/something.rb , но pry теперь отсутствует, поскольку это зависимость разработки. Перед выпуском я должен удалить require pry, если я правильно понимаю... это именно то, чего я хочу избежать. - person Anton Evangelatov; 20.08.2013
comment
@antonevangelatov Может, попробовать условное require в блоке begin .. rescue LoadError? Что-то вроде этот вопрос - person ; 20.08.2013
comment
@ user2062950 это определенно сработает, но похоже на взлом. Мне было интересно, есть ли правильный способ сделать это, то есть требовать/загружать определенные драгоценные камни (pry, отладчик и т. д.) только в процессе разработки, не беспокоясь о том, чтобы включать/исключать их до развертывания/выпуска. Я не понимаю, какова цель add_development_dependency, когда вам нужно позже добавить требование, а также убедиться, что вы его удалили, так как нужный гем не загружен. Если вы хотите вручную добавлять require каждый раз, вы можете также вручную добавить необходимый гем в gemspec или Gemfile. - person Anton Evangelatov; 20.08.2013
comment
@antonevangelatov добавил больше информации - person ; 20.08.2013
comment
@ user2062950 спасибо за подробный ответ. Я отмечу это как правильное, так как лучшего решения, по-видимому, нет. Я понимаю, что add_development_dependency будет устанавливать данные гемы только в режиме разработки, но у меня все еще есть сомнения в том, что лучше всего их запрашивать/загружать... Если я возьму, например, rspec, то это совершенно ясно - он требуется только в spec_helper для пример и поэтому не мешает остальной части приложения. При разработке можно было бы запускать только rspec (spec_helper.rb)... однако то же самое не относится к pry, поскольку мне это нужно во всем приложении во время разработки. - person Anton Evangelatov; 20.08.2013

Я думаю, что нашел обходной путь для этого. Если вы настроите упаковщик для использования pry в качестве консоли с

$ bundle config console pry

Тогда pry требуется сам по себе, и вам не нужно явно требовать в исходных файлах.
Кроме того, вы получаете историю при нажатии ' ↑ '.

person cmantas    schedule 27.09.2016