我正在通过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 :: Rails :: AppRailsLoader模块中,exec_app_rails
简单地通过调用内核exec
方法并传入命令参数来将当前进程替换为另一个进程。
这不保留自定义属性。有谁知道我可以如何解决这个问题?我目前正在运行Rails 4.2.6。它看起来像Rails 5中的模块名称更改为Rails::AppLoader
。
没有人?哇,我很惊讶,这是以前没有出现过。与此同时,要解决这个问题,我必须编辑railties gem来完成这项工作。在宝石LIB /导轨/ app_rails_loader.rb,我不得不改变它调用exec_app_rails方法: 'EXEC RUBY,EXE,* ARGV' 到 'EXEC RUBY,-D-Dmy_prop = MY_VALUE,EXE,* ARGV ' –
在评论中放置代码是如此痛苦......见下文 –