概要
sinatraで、webアクセス、Rake、Rspec実行時に使う環境変数(environment)を、
それぞれどうやってセットすればよいかのメモ。
環境
- ruby 2.2.3p173
- sinatra-1.4.7
- Apache
- Passenger
webアクセス
Apacheのconfで、RACK_ENVを設定する。
httpd.conf
SetEnv RACK_ENV development
アプリケーションのファイルで、下記のように環境変数をセットして使う。
(**snip**)
set :environment, ENV['RACK_ENV'].to_sym || :development
ActiveRecord::Base.configurations = YAML.load(ERB.new(File.read("db/database.yml")).result)
ActiveRecord::Base.establish_connection(settings.environment)
(**snip**)
Rake tasks
taskファイル
namespace :sample do
task :environment do
puts Sinatra::Application.environment
end
task :task1 => :environment do
end
end
rakeコマンド実行時に、下記のように引数に環境変数を渡す。
他の方法ないのかな?
$ RAILS_ENV=production bundle exec rake sample:task1
RSpec
spec_helper.rbの先頭に、ENV['RACK_ENV'] = 'test'
と定義する。
余りかっこよくないが、色々と調べてみたところ、こうやってる人が多いっぽい。
これで、webのテスト時も、rake taskのテスト時も、環境変数にtest
がセットされた。
spec/spec_helper.rb
ENV['RACK_ENV'] = 'test'
(**snip**)
ActiveRecord::Base.configurations = YAML.load(ERB.new(File.read("db/database.yml")).result)
ActiveRecord::Base.establish_connection(:test)
(**snip**)
まだすっきりしない部分もありますが
以上
[参考]
https://shoyan.github.io/blog/2016/05/02/what-is-rack-env-and-unicorn-and-sinatra/