Про Hanami уже писали на Хабре, и у команды есть, чем нас обрадовать:
Заморозка фич, логгер уровня проекта, автоматическое логгирование запросов HTTP, запросы SQL и миграции. Минорные исправления ошибок.
Релиз v1.0.0.beta1
замораживает разработку нового функционала Hanami для 1.0, вместе с тем добавляет пару новых функций и немного исправлений.
С этого момента Hanami API's будет оставаться стабильным вплоть до версии 2.0.
Стабильный релиз (v1.0.0
) ожидается между концом марта и началом апреля 2017, что совпадает по времени с традицией любования цветущей Сакурой (Hanami) в Японии.
За это время команда Hanami выпустит другие beta и release candidate версии.
Возможности
Hanami сейчас совместим с Ruby 2.3+ (включая последний 2.4) и Rack только 2.0.
Логгер проекта
Мы добавили логгер уровня проекта, доступный как Hanami.logger
. Если тебе нужно занести что-то в лог, сделай примерно так: Hanami.logger.debug "hello"
.
По этой причине, логгеры уровня приложений пришлось убрать (eg. Web.logger
, Admin.logger
).
Следовательно, настройки логгеров для индивидуальных приложений больше не поддерживаются (т.е. внутри apps/web/application.rb
). Чтобы настроить логгер, отредактируйте config/environment.rb
.
Автоматический логгинг
Проект, построенный на Hanami, может автоматически логировать входящие HTTP запросы, SQL запросы и миграции.
Когда проект запущен в режиме разработки, формат логов выглядит более читаемо:
[bookshelf] [INFO] [2017-02-11 15:42:48 +0100] HTTP/1.1 GET 200 127.0.0.1 /books/1 451 0.018576
[bookshelf] [INFO] [2017-02-11 15:42:48 +0100] (0.000381s) SELECT "id", "title", "created_at", "updated_at" FROM "books" WHERE ("book"."id" = '1') ORDER BY "books"."id"
Для продакшена, напротив, JSON стал форматом по умолчанию. JSON проще парсить и он более машино-ориентированный. Это хорошо сочитается с SaaS агрегаторами логов.
{"app":"bookshelf","severity":"INFO","time":"2017-02-10T22:31:51Z","http":"HTTP/1.1","verb":"GET","status":"200","ip":"127.0.0.1","path":"/books/1","query":"","length":"451","elapsed":0.000391478}
Миграции будут писать в поток стандартного вывода операции, совершенные со схемой базы данных.
? bundle exec hanami db migrate
[hanami] [INFO] Begin applying migration 20170213123250_create_books.rb, direction: up
[hanami] [INFO] (0.001756s) CREATE TABLE `books` (`id` integer NOT NULL PRIMARY KEY AUTOINCREMENT, `name` varchar(255) NOT NULL, `created_at` timestamp NOT NULL, `updated_at` timestamp NOT NULL)
[hanami] [INFO] (0.001738s) INSERT INTO `schema_migrations` (`filename`) VALUES ('20170213123250_create_books.rb')
[hanami] [INFO] Finished applying migration 20170213123250_create_books.rb, direction: up, took 0.004091 seconds
Улучшенный генератор модели
Генератор модели отныне создает и файл миграции для сущности, которую генерирует.
? bundle exec hanami generate model book
create lib/bookshelf/entities/book.rb
create lib/bookshelf/repositories/book_repository.rb
create db/migrations/20170213123250_create_books.rb
create spec/bookshelf/entities/book_spec.rb
create spec/bookshelf/repositories/book_repository_spec.rb
Это сгенерирует сущность, а также соответствующие репозиторий, миграцию, и шаблоны для тестов.
Миграции сразу содержат код для создания таблицы, первичного ключа и временных меток.
# db/migrations/20170213123250_create_books.rb
Hanami::Model.migration do
change do
create_table :books do
primary_key :id
column :created_at, DateTime, null: false
column :updated_at, DateTime, null: false
end
end
end
config/boot.rb
Новые проекты будут создаваться с новым файлом: config/boot.rb
require_relative './environment'
Hanami.boot
Это полезно для запуска сервисов окружения Hanami, особенно без доступа к серверу или консоли. Типичный сценарий — Sidekiq Sidekiq. Если ты хочешь запускать асинхронные задачи с этой очередью сообщений, запусти процесс так:
bundle exec sidekiq -r ./config/boot.rb
Минорные изменения
Чтобы посмотреть полный список изменений, посмотрите в CHANGELOG и features list.
Обновленные релизом гемы
hanami-1.0.0.beta1
hanami-model-1.0.0.beta1
hamami-controller-1.0.0.beta1
hanami-assets-1.0.0.beta1
hanami-mailer-1.0.0.beta1
hanami-helpers-1.0.0.beta1
hanami-view-1.0.0.beta1
hanami-validations-1.0.0.beta1
hanami-router-1.0.0.beta1
hanami-utils-1.0.0.beta1
Contributors
Мы признательны каждому из тех, кто помогал выпустить релиз. Вот список этих замечательный людей:
- Adrian Madrid
- Alfonso Uceda
- Andy Holland
- Bhanu Prakash
- Gabriel Gizotti
- Jakub Pavlik
- Kai Kuchenbecker
- Ksenia Zalesnaya
- Leonardo Saraiva
- Lucas Hosseini
- Marcello Rocha
- Marion Duprey
- Marion Schleifer
- Matias H. Leidemer
- Mikhail Grachev
- Nick Rowlands
- Nikita Shilnikov
- Oana Sipos
- Ozawa Sakuro
- Pascal Betz
- Philip Arndt
- Piotr Solnica
- Semyon Pupkov
- Thorbjorn Hermansen
- Tiago Farias
- Victor Franco
- Vladimir Dralo
- alexd16
- b264
- yjukaku
Как обновиться с предыдущей версии
Если ты хочешь обновить свой проект с v0.9
, обрати внимание на руководство по обновлению.
От переводчика
Так как финальный релиз уже не за горами, пора наконец попробовать этот фреймворк, если вы еще не успели этого сделать.
Для тех, кому привычнее читать на русском — хорошие новости: перевод официальной документации и гайдов уже идет. Смотрите в пул-реквесты, присоединяйтесь, присылайте свои.
crezd
А что это такое?
sovetnik
Фреймворк же. Hanami
ky0
mwambanatanga
«Ханами» это не сезон цветения сакуры. Это процесс любования цветущей сакурой (и не обязательно именно сакурой), с сидением под деревьями в цвету, неспешными разговорами, распитием горячительных напитков, закуской и прочей атрибутикой. В общем, «ханами» есть «пяление на цветы».
sovetnik
Поправил.
constXife
Хорошая альтернатива рельсе. Я как-то себе делал блог на hanami, но она тогда была ещё сыроватой + были проблемы с кешированием (на проде всё настолько сурово кешировалось, что в итоге когда открываешь записи, то всегда открывается содержимое первой записи, которую ты увидел) — я не стал разбираться и перешёл на middleman. Но тем не менее hanami мне понравился.
olegkrasnov
Интересует мнение профессиональных рубистов про crystal, kemal и т.п.
Сам я не программист.
ZurgInq
Как минимум для crystal на их сайте красуется «The project is in alpha stage». Что как бы намекает.
sovetnik
Вообще, они обещают релиз в 2017, пара фреймворков для web уже есть, сейчас только ORM осталось написать. Если интересно следить за ними — вот чат в телеграмме.
timetogo
На текущий момент Crystal надо больше рассматривать как экспериментальный проект, мне кажется. Он имеет похожий на Руби синтаксис, но это всё равно другой язык, вы не сможете пользоваться богатой экосистемой Руби. К тому же Руби, на самом-то деле, далеко не медленный язык в настоящее время, сами разработчики Crystal об этом в блоге, кстати, и пишут. Репутацию медленного языка Руби заслужил благодаря Rails, если использовать микро-фреймворки типа Sinatra, Hanami, или ещё лучше — Roda, то скорость вырастет многократно. Но надо заметить, что в основном на скорость работы проекта влияют не фреймворки, а скорость работы с базой, так что по факту может и не быть разницы между Rails или Play, например.
Вместо перехода на Crystal или Elixir для типичного веб-проекта я бы лучше присмотрелся к TruffleRuby, учитывая его прогресс в последнее время.
am-amotion-city
Просто к слову: я пока не видел ни единого программиста, перешедшего на Elixir с руби, и хоть сколько-нибудь жалеющего об этом. Ну, это кроме всех плюшек эрланговой виртуальной машины, типа OTP. хот релоадов, нулевого даунтайма, скорости отклика в единицы микросекунд и так далее.
По ощущениям — это как с PHP на руби перейти, плюс производительность вырастает сразу скачком из-за довольно низкого порога входа.
timetogo
Не думаю, что именно этот аспект языка делает его привлекательнее Руби, хотя могу и ошибаться, детально Эликсир не смотрел. Кстати, можете сами сравнить реализацию многих алгоритмов на обоих языках:
am-amotion-city
Ну и зря не думаете. Компания обычно не может себе позволить потратить полгода на переобучение команды.
Розетта смешная, да. Людей, пишущих такой код, я даже не позову на собеседование. Как бы сразу до свидания.
am-amotion-city
Вы бы там определились, насколько панибратски вы относитесь к пользователям.