具有多个环境配置的 Sinatra
Sinatra with multiple environment config
在使用 Sinatra 几周后,我到了将我的应用程序部署到暂存环境中的时刻。在查看 sinatra configuration settings 并环顾四周后,我没有找到一种方法来为每个环境配置一个配置文件,所以没有这个:
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
在那个 class/module 中,我们可以为每个环境创建一个文件,也可以为所有不同的配置创建一个文件。
那么我的问题是,有没有一种方法可以使配置与端点定义不在同一位置来构建 Sinatra 应用程序?
预先谢谢你。
尝试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
我终于想出了一个使用self.included class方法的解决方案:
# 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
在使用 Sinatra 几周后,我到了将我的应用程序部署到暂存环境中的时刻。在查看 sinatra configuration settings 并环顾四周后,我没有找到一种方法来为每个环境配置一个配置文件,所以没有这个:
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
在那个 class/module 中,我们可以为每个环境创建一个文件,也可以为所有不同的配置创建一个文件。
那么我的问题是,有没有一种方法可以使配置与端点定义不在同一位置来构建 Sinatra 应用程序? 预先谢谢你。
尝试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
我终于想出了一个使用self.included class方法的解决方案:
# 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