Rake で現在のラック環境に関する情報を取得する方法はありますか? たとえば、Rack がdevelopment
またはproduction
モードで実行されているかどうかを確認するにはどうすればよいですか?
Rake が Rack-aware でないことは理解しています。本番環境と開発環境の間でほぼ同一の Rake タスクでコードを複製することを避けようとしています。
他の環境変数として、次を使用して取得できます。
ENV['RACK_ENV']
これが Sinatra アプリケーションであり、環境を に設定したことを考慮してconfig/environment.rb
、以下を に追加できますRakefile
。
task :environment do
require File.expand_path('config/environment', File.dirname(__FILE__))
end
task :your_task => :environment do
# task
end
次に、またはを使用して環境を取得できます ( での設定方法によって異なりますenvironment.rb
) 。ENV['RACK_ENV']
Sinatra::Application.environment
構成ファイルがなく、アプリケーション ファイルのみがあることを考慮するとconfig/environment.rb
、たとえばhello_world.rb
、次のように動作します。
hello_world.rb:
require 'sinatra'
set :environment, :production
get '/' do
'Hello World'
end
レーキファイル:
task :environment do
require File.expand_path('hello_world', File.dirname(__FILE__)) # your Sinatra app
end
task :your_task => :environment do
puts Sinatra::Application.environment
end
実行するときは、rake your_task
次を取得する必要があります。
> rake your_task
production
2.5 年後、私が見つけた最良の解決策を共有したいと思います。
アプリケーションのルート フォルダーにファイルを作成し.env
、アプリケーション環境を指定するフラグを追加します。
ENVIRONMENT=development
次に、Brandon Keepers のdotenv
gem を使用して、このファイルからすべての環境変数を読み込みます。.env
これで、 Rake タスク内で指定された環境変数を使用できるようになりました。
Rake は で設定された明示的な値に依存するため、使用する予定の環境ごとに.env
個別のファイルを作成する必要があります(例: dev、test、staging、productionなど)。.env
サンプルRakefile
:
require 'dotenv/tasks'
task :default => :help
desc 'Show this help menu'
task :help do
puts "Available rake tasks:"
system('rake --tasks')
end
# Will run in any environment
desc 'Demo task'
task :demo_task => :dotenv do
puts "Running demo task in '#{ENV['ENVIRONMENT']}' mode"
end
# Will only run if ENVIRONMENT value in .env file is set to 'production'
desc 'Production-only task'
task :production_task => :dotenv do
if ENV['ENVIRONMENT'] == 'production'
puts "Running 'Production-only' task"
else
puts "Won't run, because the environment is not set to PRODUCTION!"
end
end
# Will only run if ENVIRONMENT value in .env file is set to 'development'
desc 'Development-only task'
task :dev_task => :dotenv do
if ENV['ENVIRONMENT'] == 'development'
puts "Running 'Development-only' task"
else
puts "Won't run, because the environment is not set to DEVELOPMENT!"
end
end
Rack または Sinatra アプリ内で環境変数を使用する場合 (おそらくそうします)、アプリケーションの config または bootstrap ブロックに次を追加します。
require 'dotenv'
Dotenv.load