gpt4 book ai didi

java - 如何将系统属性从jruby传递到Rails服务器

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:52 25 4
gpt4 key购买 nike

我正在通过 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

最佳答案

所以我想出了一个更好的(?)方法来处理这个问题。而不是:

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,但我不知道有更好的方法来处理它。遗憾的是这个问题之前没有得到解决

关于java - 如何将系统属性从jruby传递到Rails服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44372109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com