image


Про 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


Мы признательны каждому из тех, кто помогал выпустить релиз. Вот список этих замечательный людей:



Как обновиться с предыдущей версии


Если ты хочешь обновить свой проект с v0.9, обрати внимание на руководство по обновлению.


От переводчика


Так как финальный релиз уже не за горами, пора наконец попробовать этот фреймворк, если вы еще не успели этого сделать.


Для тех, кому привычнее читать на русском — хорошие новости: перевод официальной документации и гайдов уже идет. Смотрите в пул-реквесты, присоединяйтесь, присылайте свои.

Поделиться с друзьями
-->

Комментарии (14)


  1. crezd
    16.02.2017 07:37
    +1

    А что это такое?


    1. sovetnik
      16.02.2017 07:42

      Фреймворк же. Hanami


    1. ky0
      16.02.2017 08:52
      +2

      Без картинки вопрос неполон :)
      image


  1. mwambanatanga
    16.02.2017 07:41
    +2

    что совпадает с сезоном цветения Сакуры(Hanami) в Японии


    «Ханами» это не сезон цветения сакуры. Это процесс любования цветущей сакурой (и не обязательно именно сакурой), с сидением под деревьями в цвету, неспешными разговорами, распитием горячительных напитков, закуской и прочей атрибутикой. В общем, «ханами» есть «пяление на цветы».


    1. sovetnik
      16.02.2017 07:48

      Поправил.


  1. constXife
    16.02.2017 10:16

    Хорошая альтернатива рельсе. Я как-то себе делал блог на hanami, но она тогда была ещё сыроватой + были проблемы с кешированием (на проде всё настолько сурово кешировалось, что в итоге когда открываешь записи, то всегда открывается содержимое первой записи, которую ты увидел) — я не стал разбираться и перешёл на middleman. Но тем не менее hanami мне понравился.


  1. olegkrasnov
    16.02.2017 12:11
    -2

    Интересует мнение профессиональных рубистов про crystal, kemal и т.п.
    Сам я не программист.


    1. ZurgInq
      16.02.2017 13:26

      Как минимум для crystal на их сайте красуется «The project is in alpha stage». Что как бы намекает.


      1. sovetnik
        16.02.2017 13:35
        +1

        Вообще, они обещают релиз в 2017, пара фреймворков для web уже есть, сейчас только ORM осталось написать. Если интересно следить за ними — вот чат в телеграмме.


    1. timetogo
      16.02.2017 20:31
      +1

      На текущий момент Crystal надо больше рассматривать как экспериментальный проект, мне кажется. Он имеет похожий на Руби синтаксис, но это всё равно другой язык, вы не сможете пользоваться богатой экосистемой Руби. К тому же Руби, на самом-то деле, далеко не медленный язык в настоящее время, сами разработчики Crystal об этом в блоге, кстати, и пишут. Репутацию медленного языка Руби заслужил благодаря Rails, если использовать микро-фреймворки типа Sinatra, Hanami, или ещё лучше — Roda, то скорость вырастет многократно. Но надо заметить, что в основном на скорость работы проекта влияют не фреймворки, а скорость работы с базой, так что по факту может и не быть разницы между Rails или Play, например.

      Вместо перехода на Crystal или Elixir для типичного веб-проекта я бы лучше присмотрелся к TruffleRuby, учитывая его прогресс в последнее время.


      1. am-amotion-city
        16.02.2017 20:57
        +1

        Вместо перехода на Crystal или Elixir для типичного веб-проекта я бы лучше присмотрелся к TruffleRuby

        Просто к слову: я пока не видел ни единого программиста, перешедшего на Elixir с руби, и хоть сколько-нибудь жалеющего об этом. Ну, это кроме всех плюшек эрланговой виртуальной машины, типа OTP. хот релоадов, нулевого даунтайма, скорости отклика в единицы микросекунд и так далее.


        По ощущениям — это как с PHP на руби перейти, плюс производительность вырастает сразу скачком из-за довольно низкого порога входа.


        1. timetogo
          16.02.2017 21:14

          довольно низкого порога входа

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


          1. am-amotion-city
            16.02.2017 21:51

            Ну и зря не думаете. Компания обычно не может себе позволить потратить полгода на переобучение команды.


            Розетта смешная, да. Людей, пишущих такой код, я даже не позову на собеседование. Как бы сразу до свидания.


  1. am-amotion-city
    16.02.2017 20:46
    +1

    Если тебе нужно занести что-то в лог, сделай примерно так: Hanami.logger.debug "hello".
    [...]
    Чтобы настроить логгер, отредактируйте config/environment.rb.

    Вы бы там определились, насколько панибратски вы относитесь к пользователям.