Вышли Rails 4.1 beta1

    Не так давно, 18 декабря, состоялся релиз очередной версии Rails. Забавно, что существует пост, датированный 17-м декабря, и ссылающийся на статью из будущего. Из очередных полезностей новой версии:

    • Ускорение загрузки с помощью Spring
    • Единое место для хранения разнообразных ключей API, секретов и прочего: config/secrets.yml
    • Предпросмотр email'ов: Action Mailer Previews
    • Удобная генерация различного контента в зависимости от конкретного request с помощью Action Pack Variants
    • Добавление enum-атрибутов в Active Record


    Установка


    Чтобы прицениться к новой версии рельс, для начала ее нужно установить:

    gem install rails -v 4.1.0.beta1
    rails new rails_beta_app
    

    Ждем установки всех зависимостей и приступаем к изучению (кстати, если вас не устраивает слишком долгое время bundle, можно попробовать параллельный bunlder).

    Spring


    Spring — это гем, служащий для ускорения загрузки Rails-окружения. После первоначальной загрузки ваше приложение крутится где-то в фоне, сильно ускоряя загрузку всех команд, требующих загрузки Rails: прогона миграций, запуска консоли и, конечно же, тестов. Крайне радостной для меня новостью стало внедрение Spring в сами рельсы. Проверьте сами: rails c; exit; rails c. Повторный запуск происходит практически мгновенно, что не может не радовать.

    config/secrets.yml


    Теперь секретные ключи стоит хранить в этом файле, и получать к ним доступ с помощью Rails.application.secrets. Пример config/secrets.yml:

    development:
      secret_key_base: '3b7cd727ee24e8444053437c36cc66c3'
      some_api_key: 'SOMEKEY'
    


    Action Pack Variants


    Данная функциональность пригодится в том случае, если нам необходимо рендерить разные представления в зависимости от различных характеристик запроса. В release_notes приводится следующий пример (я немножко изменил его):

    before_action :set_variants
    
    def show
      respond_to do |format|
        format.html.tablet # renders app/views/projects/show.html+tablet.erb
        format.html.phone  { extra_setup;  render ... }
      end
    end
    
    private
      def set_variants
        request.variant = :tablet if request.user_agent =~ /iPad/
        request.variant = :phone if request.user_agent =~ /iPhone/
      end
    

    Это требует дополнительных файлов представлений:

    app/views/projects/show.html.erb
    app/views/projects/show.html+tablet.erb
    app/views/projects/show.html+phone.erb
    


    Action Mailer Preview


    Теперь не нужно отправлять письмо самому себе, чтобы посмотреть, как оно отформатировано (или, быть может, я один отправлял его себе, а все крутые сеньоры давным давно используют спец. инструменты?). Допустим, у нас есть следующий mailer:

    class NotifierPreview < ActionMailer::Preview
      def welcome
        Notifier.welcome(User.first)
      end
    end
    

    Тогда предпросмотр будет доступен по адресу localhost:3000/rails/mailers/notifier/welcome.

    Active Record enums


    Пример, выложенный в release_notes, очень радует мой взор:

    # Declare an enum attribute where the values map to integers in the database, but can be queried by name.
    class Conversation < ActiveRecord::Base
      enum status: [ :active, :archived ]
    end
     
    conversation.archived!
    conversation.active? # => false
    conversation.status  # => "archived"
     
    Conversation.archived # => Relation for all archived Conversations
    

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

    Заключение


    DHH вдохновляет нас на использование Rails 4.1.0 beta заявлением, что Basecamp уже использует эту версию. Думаю, что свой небольшой личный проектик я запущу именно на этой версии фреймворка.
    Поделиться публикацией

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

      0
      для писем есть github.com/ryanb/letter_opener
      и наверно вместо

      rails new ./

      лучше писать

      bundle exec rails new ./

      в данном случае.
        0
        Да, вы правы, поправил пост. За ссылку на гем спасибо!
      0
      Action Pack — круто!
        –2
        Spring — постоянно висящий в фоне процесс. Если памяти на рабочей машине много, то не критично, но всё же раздражает.

        Функционал Action Pack Variants недоработан, set_variants должен быть «магическим» и уже включать в себя набор самых распространенных паттернов. Копипастить set_variants из проекта в проект — прошлый век.

        letter_opener всёравно удобнее нового механизма. А сам Action Mailer Preview от чего-то сильно похож на костыль — и хрен поймешь — то ли это тест, то ли часть приложения… бредово как-то получилось.

        Active Record enums — труд студента-первокурсника сельхозтехникума. Достаточно почитать описание этого «функционала» и его подводных камней в той же статье выше. Постыдились бы такое вообще в ядро включать.

        А вообще, печально — из версии к версии рельса становится толще и толще, и вместе с этим — всё медленнее и медленнее.
          0
          По поводу set_variants — уверен, что скоро сделают какой-нибудь гем с названием, к примеру, «popluar_variants», и будет альтернатива: использовать магию или настраивать вручную. Хотя вы правы: видеть подобный функционал из коробки было бы вполне логично.
          +1
          гм.
          с какой версии она начала становиться медленней относительно 4.1?

            0
            Почему ты думаешь что из проекта в проект будет кочевать set_variants? Логика работы может быть совершенно разной
              0
              letter_opener всё-таки иначе работает. Он открывает в браузере письма, которые реально должны быть посланы, т.е. уже прошли через мейлер и, возможно, resque/sidekiq. Он нужен для проверки функционала отсылки писем. А mail_view — это инструмент для классического f5 driven development и предназначен для визуальной отладки внешнего вида писем.
                0
                > set_variants должен быть «магическим» и уже включать в себя набор самых распространенных паттернов

                Москва не сразу строилась.
                0
                > Так как беты нет на rubygems.org
                $ gem search -ra --pre rails | grep '^rails '
                rails (4.1.0.beta1, 4.0.2,
                  0
                  Плохо посмотрел, каюсь. Обновил пост.
                  0
                  Дата релиза неизвестна?

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое