Дізнайтеся кращий бандлер
Бандлер виявився чудовим засобом встановлення та відстеження джемів, яке так потрібно кожному рубі проекту настільки, що майже кожен проект використовує його. Однак, незважаючи на його повсюдність, більшість користувачів не знають про вбудовані засоби та помічники бандлера. У спробі підвищити обізнаність (і продуктивність розробників Рубі), я збираюся розповісти вам про них.
Install, update, та outdated
Ви, напевно, вже знаєте це, але я узагальню це для новачків. Запустітьbundle installдля встановлення пакетів, необхідних для вашого проекту. Що якщо ви щойно запустили git pull та там з'явилися нові джеми?bundle install. Якщо ви щойно додали нові джеми або змінили версії джемів у Gemfile?bundle install. Здавалося б, більш логічним буде запуститиbundle update, але це не тільки встановить джеми - воно також спробує оновити кожен джем у вашому пакеті. Зазвичай, це означає катастрофу, якщо, звичайно, ви насправді це планували. Командуupdateслід використовувати тоді, коли ваші джеми оновилися, і ви хочете, щоб ваш пакет мав найновішу версію, яку дозволить запустити ваш Gemfile. Запустітьbundle outdated, щоб надрукувати список джемів, які можна оновити. Якщо ви хочете оновити певний джем, запустітьbundle update GEMабоbundle update, щоб оновити все. Після оновлення простежте за тим, щоб пройти всі тести, перш ніж комітити ваш новий Gemfile.lock!
Show та open
Командаshowмає ще один трюк за пазухою:bundle show --paths. Роздрукування списку всіх шляхів може і не виглядає дуже корисною, але набагато полегшує пошук за вихідним кодом всіх джемів у вашому пакеті.Хочете знати, де описана ActionDispatch::RemoteIp? Лише один рядок:
Незалежно від того, ви використовуєте grep, ack або ag, стало дуже просто налаштувати shell функцію, яка дозволить вам здійснювати пошук по пакету за допомогою всього пари символів. Ось мої:
З цією функцією шукати стало ще простіше та швидше:
Одна з найнабридливіших речей при використанні бандлера - це те, що ви (напевно) повинні запускатиbundle execwhatever щоразу, коли хочете запустити будь-яку команду. Найпростішим способом обійти це установкаBundler binstubs. Запустившиbundle binstubs GEM, ви можете генерувати стаби (stubs) у папці bin/. Ці стаби будуть підвантажувати ваш пакет та правильну версію джему, перш ніж запустити команду. Ось приклад налаштування binstub для rspec.
Використовуйте binstubs для команд, що часто запускаються, або для команд, які ви, можливо, запускатимете через cronjob. Враховуючи, що binstubs не повинні підвантажувати багато кодів, вони будуть працювати дуже швидко. Rails 4 пристосував binstubs та вийде з bin/rails та bin/rake. Вони будуть налаштовані, щоб завжди запускатися для конкретної програми.
Створення Gemfile
Я бачив безліч скарг, що це дуже незручно щоразу набиратиsource 'https://rubygems.org/'створюючи новий Gemfile. На щастя, бандлер це робитиме за вас! Коли ви починаєте новий проект, ви можете створити новий Gemfile, використовуючи Rubygems.org як джерело, запустивши лише одну команду:
Тепер ви готові додавати джеми і встановлювати на своє задоволення!
Локальні Git джеми
Багато хто питав, як можна використовувати бандлер для того, щоб змінювати та комітувати в джем у своєму Gemfile. Завдяки зусиллям José Valim, бандлер 1.2 дозволяє робитице дуже елегантно. За допомогою однієї настройки ви можете завантажити свій власний git клон у розробку, але при розгортанні у виробництво буде перевірено, яким останнім комітом ви користувалися. Ось як налаштувати локальну git копію rack:
Після того, як все налаштовано, ви можете як змінювати код, який ваш додаток буде використовувати, так і комітіті в той репозиторій так часто, як вам захочеться.
Версії Ruby
Ще одна особливість бандлера 1.2 – запити версії рубі. Якщо ви знаєте, що ваша програма працює тільки з однією версією рубі, ви можете запросити цю версію. Просто додайте один рядок до Gemfile, вказуючи номер версії як string.
Тепер бандлер викличе виняток щоразу, коли ви спробуєте запустити вашу програму на іншій версії рубі. Вам не потрібно більше турбуватися про те, що ви випадково використовуватимете неправильну версію при розробці!
Схема залежності
Бандлер використовує Gemfile, щоб створити так звану схему залежностей, де показано безліч джемів та їх залежності один від одного. Іноді це дуже цікаво та зручно бачити графічну схему залежностей, і це те, що робить командаbundle viz. Вам знадобиться встановити джеми GraphViz і ruby-graphviz.
Після цього ви отримаєте чудовий огляд ваших залежностей. Ось схема Gemfile, який містить лише один Rails джем.
IRB у вашому пакеті
Перед великим фіналом я маю для вас останню пораду: консоль команд. Запустившиbundle consoleу вас не просто відкриється IRB prompt, але також завантажаться весь пакет та всі джеми. Якщо ви хочете поекспериментувати з джемами, але у вас немає Rails джему для виклику Rails консолі, це є відмінною альтернативою.
Створення нового джему
Ну і, нарешті, те, що є найкориснішим у бандлері після всіх установок. Враховуючи, що бандлер створений для управління джемами, команда бандлера дуже мотивована, щоб зробити управління та створення джемів дуже простим. Ви можете створити папку з основою свого джему, просто запустившиbundle gem NAME. Вийде папка з gemspec, readme та lib файлами, куди ви можете помістити свій код. Коли ви додали код, ви можете встановити цей джем у свою систему для перевірки, запустившиrake install.Коли ви задоволені своїм джемом і хочете поділитися з іншими, помістити нову версію джему в rubygems.org можна, запустивши>rake release. Як позитивний побічний ефект джеми, створені таким чином, можна використовувати як гіт джеми. Це означає, що ви (і всі інші, які використовують цей джем) можете копіювати, редагувати та збирати будь-який коміт.
Підіб'ємо підсумки
Тепер, коли ви знаєте стільки корисних речей про бандлера, я пропоную вам це протестувати. Використовуйте пошук, створюйте джеми! Наскільки я можу судити, бандлер найбільше корисний тим, що він спрощує процес спільної співпраці та використання коду, що робить Рубі кращим для всіх.
Примітка: друг Engine Yard, André Arko, член команди ядра бандлера, написав для нас цю чудову статтю. Не забудьте заглянути на його сайт.