在Sinatra中靈活地配置Environments

在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   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章