【发布时间】:2017-11-06 09:56:04
【问题描述】:
我正在通过 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 中。看起来这是因为在 railties Rails::AppRailsLoader 模块内部,exec_app_rails 只是通过调用内核 exec 方法并传入命令参数来用另一个进程替换当前进程。
这不会保留自定义属性。有谁知道我该如何解决这个问题?我目前正在运行 Rails 4.2.6。看起来在 Rails 5 中模块名称更改为 Rails::AppLoader。
【问题讨论】:
-
没有人吗?哇,我很惊讶这以前没有出现过。与此同时,为了解决这个问题,我不得不编辑 railties gem 来完成这项工作。在 gems lib/rails/app_rails_loader.rb 中,我不得不将调用
exec RUBY, exe, *ARGV的 exec_app_rails 方法更改为exec RUBY, -D-Dmy_prop=my_value, exe, *ARGV -
将代码放入 cmets 太痛苦了……见下文
标签: java ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5