2017-06-05 7 views
1

JRuby経由でローカルRailsサーバー(WEBrick)を実行していて、最終的にTorqueboxで実行されるコードをテストしたいとします。私はENV_JAVA経由でいくつかのカスタムJavaシステムのプロパティにアクセスしようとしています。これらのシステムプロパティはTorquebox上で実行してローカルでコードをテストするときに利用できます。私はコマンドラインでシステムプロパティに "-J"引数を渡しています。
JRubyだけを実行すると、すべて正常に動作し、自分のカスタムプロパティにアクセスできます。jrubyからRailsサーバーへシステムシステムプロパティを渡す方法

C:\jruby\jruby-1.7.24\bin\jruby.exe -J-Dmy_prop=my_value -e "puts ENV_JAVA['my_prop']" 

これは単に出力するために "my_value"を出力します。

私の問題は、ローカルRailsサーバーを実行しているときに、これらのカスタムプロパティにアクセスしようとしています。ローカルのRailsサーバーを起動するために私のコマンドラインは次のようなものになります。

C:\jruby\jruby-1.7.24\bin\jruby.exe -J-Dmy_prop=my_value C:\jruby\jruby-1.7.24\bin\rails s 

をWEBrickには、起動すると、私のカスタムプロパティ"my_prop"ENV_JAVAではなくなり。 Rails :: AppRailsLoaderモジュールの中で、exec_app_railsは、カーネルexecメソッドを呼び出してコマンド引数を渡すだけで、現在のプロセスを別のものに置き換えるだけです。

これはカスタムプロパティを保持しません。誰も私がこれを回避する方法を知っていますか?私は現在、Rails 4.2.6を実行しています。 Rails 5のように、モジュール名はRails::AppLoaderに変更されました。

+0

誰もいませんか?うわー、私はこれが前に起きていないことに驚いています。その間、この問題を回避するために、私はこの仕事をするために柵の宝石を編集しなければなりませんでした。 'execのRUBY、-D-Dmy_prop = my_value、exeファイル、* ARGVに ' execのRUBY、exeファイルを、* ARGV' :宝石のlib /レール/ app_rails_loader.rbでは、私が呼び出すexec_app_rails方法を変更しなければなりませんでした' –

+0

コメントにコードを入れるのはとても苦痛です...下記を参照してください –

答えて

0

これを処理するには、より良い(?)方法を見つけました。代わりに:

exec RUBY, exe, *ARGV 

私はこれを行うことができます。

custom_sys_props = {} 
current_sys_props = ENV_JAVA.to_hash 
default_sys_props = eval(%x(#{RUBY} -e "puts ENV_JAVA")) 
current_sys_props.each {|k,v| custom_sys_props[k] = v if default_sys_props[k] != v } 
jruby_props = [] 
custom_sys_props.each{|k,v| jruby_props << "-J-D#{k}=#{v}"}   
exec RUBY, *jruby_props, exe, *ARGV 

その醜いと実際にはJRubyのために動作しますが、私はそれを処理するためのより良い方法を知ってはいけません。それでも、これは同僚と協議した後

0

前に対処されていないことを恥は、私は私のプロジェクトディレクトリ内から

jruby.exe -J-Dmy_prop=my_value script/rails 

を呼び出すことによって、私のレールのサーバを実行することができ判明します。だから私もrails.batスクリプトを実行する必要はありません。これが誰かを助けることを願っています

関連する問題