Синатра с несколькими настройками среды - PullRequest
0 голосов
/ 15 мая 2018

Проработав пару недель с Sinatra, я пришел к моменту развертывания своего приложения в промежуточной среде. После просмотра настроек конфигурации sinatra и осмотра я не нашел способа получить файл конфигурации для каждой среды, чтобы вместо этого:

require 'sinatra/base'
require 'sinatra/custom_logger'

class MyApp < Sinatra::Base
  helpers Sinatra::CustomLogger

  configure :development do
    logger = MyCustomLogger::Logger.new(param1, 
                                        param2, 
                                        param3,
                                        paramX)
    set :logger, logger
    ...
  end

  configure :production do
    logger = MyAnotherCustomerLogger.new(param1, param2)
    set :logger, logger
  end

  configure :whatever do

  end

  # endpoints definition
end

Я бы хотел получить что-то более чистое, например:

require 'sinatra/base'
require 'environment_config'

class MyApp < Sinatra::Base
  register EnvironmentConfig # Not sure how..

  ...
end

class EnvironmentConfig
  configuration :development do
    # 10 lines of configuration
  end

  configuration: production do
    # 20 lines of configuration
  end
end

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

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

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Я наконец-то нашел решение с использованием метода класса self.included:

# config.rb
require 'sinatra/custom_logger'

module Config
  def self.included(base_klass)
    base_klass.extend(ClassMethods)

    base_klass.helpers(Sinatra::CustomLogger)

    base_klass.class_eval do
      configure :development do
        logger = MyCustomLogger.new(
          param1,
          param2,
          param3,
          paramx
        )


        set :logger, logger
      end

      configure :production do
        # other stuff
      end
    end
  end

  module ClassMethods; end
end

тогда

require_relative 'config'

class MyApp < Sinatra::Base
  include Config
0 голосов
/ 15 мая 2018

попробуйте sinatra / config, вы можете сохранить все свои настройки конфигурации в файле и предоставить конкретную конфигурацию среды.

 require "sinatra"
 require "sinatra/contrib"

config_file '../config/config.yml'
get "/"
settings.bar
end
#config.yml
development:
  foo: development
  bar: bar
test:
  foo: test
  bar: bar
production:
  foo: production
  bar: bar

http://sinatrarb.com/contrib/config_file

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...