@askhat

Где хранить параметры инициализации rack приложения?

Любое rack приложение начинается с config.ru, а так как в Руби нет единственного верного способатм, существует множество подходов к организации этого "старт поинта" всего проекта. В моем текущем проекте инициализация разбита на два файла, собственно config.ru:
$:.unshift File.expand_path '..', __FILE__
require 'init'
run Awesomeapp

и init.rb:
require 'bundler
Bundler.require :default

Mongoid.load! 'db.yml', :development

Dragonfly.app.configure do
  datastore :mongoid
end

require 'app/models'
require 'app/lication'

Я не вижу причин, почему содержимому init.rb не быть в config.ru, что собственно и сподвигло меня задать этот вопрос: а как вы осуществялете инициализацию приложения? Чем плох мой способ и чем хорош ваш?
  • Вопрос задан
  • 2452 просмотра
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
config.ru
require_relative 'config/boot'

run Grape::RackBuilder.application


config/boot.rb
# Defines our constants
RACK_ENV = ENV['RACK_ENV'] || 'development'  unless defined?(RACK_ENV)
APP_ROOT = File.expand_path('../..', __FILE__) unless defined?(APP_ROOT)

# Load our dependencies
require 'rubygems' unless defined?(Gem)
require 'bundler/setup'
# Load initializers
Bundler.require(:default, RACK_ENV)

require_relative 'settings'

ApplicationSettings.source File.expand_path('config/application.yml', APP_ROOT)
ApplicationSettings.root = APP_ROOT

require_relative 'database'

Dir[File.join(File.dirname(__FILE__),'initializers/**/*.rb')].each {|file_name| require file_name}

Rabl.configure do |config|
  config.include_json_root = false
end

Grape::RackBuilder.setup do
  %w{api models lib uploaders models abilities jobs search_indexes}.each do |path|
    add_source_path ApplicationSettings.root("#{path}/**/*.rb")
    add_source_path ApplicationSettings.root("#{path}/*.rb")
  end

  use Warden::Manager do |config|
    config.strategies.add(:public_access_token, PublicTokenStrategy)
    config.default_strategies :public_access_token
    config.failure_app = API::Application
    config.intercept_401 = false
  end

  use Rack::Config do |env|
    env['api.tilt.root'] = ApplicationSettings.root('rabl')
  end

  mount 'API::Application', to: '/api'

  logger ApplicationSettings.logger(:rackbuilder)
end.boot!


Помимо config.ru инициализация приложения нужна также и в spec_helper для тестирования. Поэтому разбивать обязательно.
Ответ написан
Комментировать
MpaK999
@MpaK999
Буду!
Да в общем ничего плохого нет, просто не ясно зачем разбивать на 2 файла, когда кода там на 10 строчек :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы