Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Конфигурация Основы разработки на Ruby on Rails

Программа урока

  • Работа с окружениями в Rails
  • Использования инициалайзеров
  • Хранение конфиденциальной информации
  • Spring
  • Настройка логгирования
  • Настройка Puma для работы с Rails

Окружения

По умолчанию в Rails создано три файла с окружениями:

  • development
  • test
  • production

Порядок создания нового окружения:

  • Создать файл в config/environments
  • Обновить настройки подключения к БД
  • Обновить настройки webpacker

Создание базы данных для нового окружения:

staging_unmerged:
  <<: *default
  database: db/test.sqlite3

Запуск сервера в нужном окружении:

bin/rails s -e test

Запуск консоли в нужном окружении через глобальную переменную окружения

RAILS_ENV=staging_unmerged bin/rails c

Initializers

Инициалайзеры нужны для того, чтобы передать в приложение какие-либо настройки или просто запускать код в момент запуска самого приложения. Прдставляют из себя просто файлы с ruby-кодом.

Все файлы с инициалайзерами лежат в config/initializers

# Инициалайзеры запускаются, когда приложение полностью загружено
# https://guides.rubyonrails.org/configuring.html#initialization-events
# Выполнить код в определенные моменты загрузки приложения
Rails.application.config.before_initialize do
  # initialization code goes here
end
Aws.config.update(
  region: 'us-west-2',
  credentials: Aws::Credentials.new('akid', 'secret')
)

Хранение конфиденциальной информации

Редактирование зашифрованного config/credentials.yml.enc

Файл шифруется с помощью config/master.key. Этот файл надо надежно хранить и не выкладывать в открытый доступ.

EDITOR=vim bin/rails credentials:edit

master.key:

84d07eaf0803e0e9be81dd93e3b8874b

credentials.yml.enc:

V4h/v1fE/bGKuUFdu7u05b04IZzkNaTxRHB0R5hc9gPNhuEV3PKMBW0M6Vp4AxRndap/PhdXDXC4DmE4Ad6QpJtC/yANZJ1vjaEgYWCf3ibzIMEZ6Qc6yHS25JdsxQe033/EgXeeDMRaA+U+VYZSoRChrseWqdaZ/pEdZEP6LW76kNFQ2eLMyk5/xHr8Nwqva5DNtjVxvwLb0aB9cj9eenYhOlBQV93zEAqqbxSV8+UHlwUUXc1VXMKj5NDWjHVUvX2AQWVi0NefmtdMon2PG6UC5mH84CtcvV1kDF4M9vkuTOwLhkXd4AQm+SOPgXOFJat2BM/EB41nl0x47O1DuOOpSqWrwa8yehjCpe85kU6SBvflehVK9CTGfaV6abFP2O6vDtTS4yXss8JeZ0NIwH68JytyKdrt3riVl24UHlE=--7DTxhIEXrrXC6i9d--1KKY2cWFay7yMEYHYRWdug==

Spring

Spring - предзагрузчик приложения. Хранит приложение в фоновом режиме, тем самым увеличивая скорость разработки: тесты, миграции и пр. запускаются быстрее.

Добавление и удаление Spring из бинарных файлов:

bundle exec spring binstub --all
bin/spring binstub --remove --all

bin/rails restart

Логгирование

class PagesController < ApplicationController
  def index
    # Вызов метода логирования
    logger.debug('Debug logs')
  end
end
# config/environments/*.rb
Rails.application.configure do
  # Задаем минимальный уровень логирования
  # https://guides.hexlet.io/ru/logging
  # https://guides.rubyonrails.org/debugging_rails_applications.html
  config.log_level = :info
end
module RailsConfiguration
  class Application < Rails::Application
    # config.logger = Logger.new(STDOUT)
    config.logger = Log4r::Logger.new('Application logs')
  end
end

Puma

config/puma.rb

worker_timeout 3600 if ENV.fetch("RAILS_ENV", "staging_unmerged") == "staging_unmerged"

# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
#
port ENV.fetch("PORT") { 5000 }

# Specifies the `environment` that Puma will run in.
#
environment ENV.fetch("RAILS_ENV") { "staging_unmerged" }

# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

Самостоятельная работа

  • Создайте тестовый проект для настройки Rollbar:

    rails new test_rollbar_app
    cd test_rollbar_app
  • Зарегистрируйтесь на Rollbar и создайте в его интерфейсе новый проект

  • Добавьте и установите гем rollbar

  • Сгенерируйте конфигурацию командой

    bin/rails generate rollbar
  • В config/environment.rb добавьте перехват ошибок Rollbar. Полностью файл должен выглядеть так:

    # Load the Rails application.
    require_relative "application"
    
    # Initialize the Rails application.
    Rails.application.initialize!
    
    require_relative 'rollbar'
    
    notify = lambda do |e|
      Rollbar.with_config(use_async: false) do
        Rollbar.error(e)
      end
    rescue StandardError
      Rails.logger.error 'Synchronous Rollbar notification failed.  Sending async to preserve info'
      Rollbar.error(e)
    end
    
    begin
      Rails.application.initialize!
    rescue Exception => e
      notify.call(e)
      raise
    end
  • Экспортируйте переменную с токеном Rollbar

    export ROLLBAR_ACCESS_TOKEN=<ваш токен>
  • Скопируйте файл rollbar.rb из папки config/initializers в config

  • Запустите приложение. При этом сразу должна появится ошибка:

    `Application has been already initialized. (RuntimeError)`
  • Если Rollbar настроен корректно, то на сайте появится эта ошибка.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Разработчик на Ruby on Rails
Профессия
c опытом
Создание веб-приложений со скоростью света
2 февраля 5 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу