首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多环境配置的Sinatra

具有多环境配置的Sinatra
EN

Stack Overflow用户
提问于 2018-05-15 16:43:13
回答 2查看 720关注 0票数 0

在与Sinatra一起工作了几周之后,我到达了将我的应用程序部署到一个暂存环境中的时刻。在回顾了sinatra配置设置并环顾四周之后,我没有找到一种方法在每个环境中都有一个配置文件,这样就不会有这样的配置文件:

代码语言:javascript
复制
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

我想做些更干净的事情,比如:

代码语言:javascript
复制
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应用程序,使其配置与端点的定义不同?事先谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-16 07:18:42

最后,我提出了一个使用self.included类方法的解决方案:

代码语言:javascript
复制
# 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

然后

代码语言:javascript
复制
require_relative 'config'

class MyApp < Sinatra::Base
  include Config
票数 0
EN

Stack Overflow用户

发布于 2018-05-15 17:08:58

尝试sinatra/ config,您可以将所有配置设置存储在一个文件中,并提供特定的环境配置。

代码语言:javascript
复制
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

文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50355358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档