我通过JRuby运行本地Rails服务器(WEBrick),并希望测试一些最终将在Torquebox上运行的代码。我试图通过ENV_JAVA
访问一些自定义Java系统属性。在Torquebox上运行时,这些系统属性将可用,以便在本地测试我的代码,我使用" -J"在命令行上传递系统属性。论点。
当我只运行JRuby时,一切正常,我可以访问我的自定义属性。
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 :(得分: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,但我不知道有更好的方法来处理它。
之前没有解决这个问题仍然是一种耻辱答案 1 :(得分:0)
在与同事讨论后,我发现我可以通过调用
来运行我的rails服务器jruby.exe -J-Dmy_prop=my_value script/rails
从我的项目目录中。所以我甚至不需要运行rails.bat脚本。希望这有助于某人