欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Sinatra中灵活地配置Environments

程序员文章站 2022-05-02 14:29:37
...

在Sinatra中灵活的配置Environments

 

在Sinatra中有三个预先定义的环境属性值,包括:development, test, production.

这个当前所处的环境的值还可以通过RACK_ENV这个环境变量来设置。如果什么都不设置,默认就是develpment。

 

之所以要区分不同环境的值,主要是我们在不同的环境下需要采用不同的配置。例如:开发环境采用postgres,测试环境运行自动化测试用sqlite,产品环境部署需要用到Cloud Foundry上的Postgres Service。

 

首先,使用configure来设置不同环境的配置。比如上面的数据库配置的例子:

  configure :development do
    DataMapper.setup(:default, "postgres://localhost/test")
    DataMapper.finalize.auto_upgrade!
  end

  configure :test do
    DataMapper.setup(:default, "sqlite::memory:")
  end

  configure :production do
    load_postgres_on_cloudfoundry
    DataMapper.finalize.auto_upgrade!
  end
 其中,production环境中load_postgres_on_cloudfoundry方法负责具体获取和初始化Cloud Foundry上数据库的配置。Rack应用部署到Cloud Foundry的时候,环境变量RACK_ENV会设置为production。

 

在本地开发调试的时候可以设置RACK_ENV这个环境变量来制定,也可以通过命令行参数来指定。例如: ruby my_app.rb -e [ENVIRONMENT]

 

还可以在代码中通过set指令设置,例如:set :environment, :production。如果不用set设置,:environment默认就是ENV['RACK_ENV']

 

同时在Sinatra的应用中,我们可以通过预定义的development?, test?和production?方法来检查和判断当前的环境的设置。

 

------------------------------------------------------------------------------------------------------

 

上面这些就是最常见的使用方式。接下来介绍一个Sinatra的一个扩展config_file,可以方便我们使用单独的YAML文件来配置不同的环境属性。

它可以自动发现配置文件中的设置,并且采用跟当前的环境对应的属性设置。在应用中我们可以通过settings来访问这些配置。

 

需要先安装:gem install sinatra-contrib

 

使用方法:先写一个config.yml文件

greeting: Welcome to my file configurable application

 在典型的Sinatra应用中读取greeting的值:

require "sinatra"
require "sinatra/config_file"

config_file 'path/to/config.yml'

get '/' do
  @greeting = settings.greeting
  haml :index
end

# The rest of your classic application code goes here...

 在模块化的Sinatra的应用中:

require "sinatra/base"
require "sinatra/config_file"

class MyApp < Sinatra::Base
  register Sinatra::ConfigFile

  config_file 'path/to/config.yml'

  get '/' do
    @greeting = settings.greeting
    haml :index
  end

  # The rest of your modular application code goes here...
end
 上面的例子是最简单的用法,下面再说明一下如何针对不同的环境分别进行配置:

方法一:

development:
  foo: development
  bar: bar
test:
  foo: test
  bar: bar
production:
  foo: production
  bar: bar

方法二:

foo:
  development: development
  test: test
  production: production
bar: bar

不管采用那种方法,setting.foo可以取得对应的环境的名称,settings.bar的值为bar

 

关于环境的配置,最后一点是如果我们有除了development, test, production之外更多的环境需要配置,比如:staging环境。

我们可以通过设置environments来增加更多的环境。

例如:

set :environments, %w{development test production staging}

参考文档:

    1.http://www.sinatrarb.com/contrib/config_file.html