Rakeの現在のRack環境に関する情報を入手する方法はありますか?たとえば、ラックがdevelopment
またはproduction
モードで動作しているかどうかを確認するにはどうすればよいですか?Rakeで現在のRack環境を取得するには?
私はRakeがRack対応ではないことを理解します。実動環境と開発環境の間でほぼ同じRakeタスクでコードを複製しないようにしようとしています。他の環境変数として
Rakeの現在のRack環境に関する情報を入手する方法はありますか?たとえば、ラックがdevelopment
またはproduction
モードで動作しているかどうかを確認するにはどうすればよいですか?Rakeで現在のRack環境を取得するには?
私はRakeがRack対応ではないことを理解します。実動環境と開発環境の間でほぼ同じRakeタスクでコードを複製しないようにしようとしています。他の環境変数として
、あなたが使用してそれを取得することができます。
ENV['RACK_ENV']
を、それはシナトラのアプリケーションだし、あなたがconfig/environment.rb
に環境を設定したことを考えると、あなたはに以下を追加することができ、あなたのRakefile
:
task :environment do
require File.expand_path('config/environment', File.dirname(__FILE__))
end
task :your_task => :environment do
# task
end
その後、あなたはENV['RACK_ENV']
またはSinatra::Application.environment
と環境(あなたがenvironment.rb
でそれを設定する方法によって)を取得することができます。
hello_world.rb:
require 'sinatra'
set :environment, :production
get '/' do
'Hello World'
end
Rakefile:
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
例えば
hello_world.rb
、用
config/environment.rb
設定ファイル、唯一のアプリケーションファイルは、以下の作品はありません考慮
rake your_task
を実行するときは、次を取得する必要があります。
> rake your_task
production
動作しません。ここに簡単なRakefileを示します: 'task:test_rack_env do puts ENV ['RACK_ENV'] end' 空白行を出力します。 –
ここで、Rack環境を 'production'または' development'に設定していますか? – toch
私はSinatraを使用しているので、環境を設定します。 –
質問は古いですが、ベストプラクティスの回答または満足する回答を一切取ったことはありません。
実際の質問はどのような環境でRakeタスクで正しい設定やヒットを正しいif条件にロードするかを確認する方法。
注:レーキは、ラックについて多くを与えるものではありませんので(レーキは、HTTPを使用していない) へRACK_ENVに依存しているレーキ タスクは、あなたのメインのシナトラのアプリケーションをロードする場合は基本的に間違っているが、一般的で便利です( RACK_ENVは、Sinatrasの開発/ test/productionが正しく設定されていることを確認するために必要です。
答え:各Rakeタスクコールで環境を設定します。
コマンドライン呼び出し:(crontabの中)
/usr/bin/rake namespace:task_name RACK_ENV=production
cronジョブ呼び出し:
cd /into/your/app/root && /usr/bin/rake namespace:task_name RACK_ENV=production --silent
注:あなたはそれを持っている場合はレーキビンのパスを指定する必要はありませんグローバルシステム変数。あなたのパスは、例で使用される鉱山と異なってUnixシステム上で確認することがありますwhereisは熊手
あなたが経由であなたのタスクでRACK_ENV
を確認することができます。私がしたい、2.5年後
puts ENV["RACK_ENV"]
私は通常、他のすべてのタスクが依存する ':environment'タスクを持っています。その中で私はいつも他のタスクが必要とするデフォルト値を設定します。ですから、さらに進んで、 'ENV ['RACK_ENV'] || = 'development''をMakefileのトップか':environment'タスクの中で定義することを提案します。 – Bill
私が見つけたものを最高の解決策にしてください。
アプリケーションのルートフォルダに.env
ファイルを作成し、アプリケーション環境を指定するフラグを追加します。
ENVIRONMENT=development
次に、このからすべての環境変数をロードするためにブランドンキーパーdotenv
宝石を使用ファイル。これで、Rakeタスク内で.env
に指定されている環境変数を使用できます。あなたが(例えばDEV、テスト、はステージング、生産など)を使用する予定の各環境個別の.env
ファイルを作成する必要がありますので、
レーキは、.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
あなたは(おそらくん)あなたのラックやシナトラアプリ内の環境変数を使用したい場合は、アプリケーションの設定やブートストラップブロックに次の行を追加します。
ありがとう!まさに私が探しているもの!さまざまな環境で異なる '.env'ファイルを使用するには、[avdiのアプローチ](http://devblog.avdi.org/2014/01/17/dotenv-for-multiple-environments/)またはrakeが異なる '.env'ファイルでenv変数を拾うためのいくつかの他のメカニズム? – EricC
ローカルでプロダクション設定をテストするには、 '.env.production'というファイルがあります。テストを実行している間は 'env'を実行します(テスト中にローカルenvファイルの名前を' .env.local'に変更します)。 –
http://stackoverflow.com/questions/2715035/rails-env-vs-rails-env – ted
このリンクは、Rails内のラック環境の使用に関するものであり、レーキについては何も言及していません。それはどのように適用されますか? –
これらの異なるRakeタスクを表示してください。もし私たちがいくつかのコードを見たら助けてくれるかもしれません。 – robkuz