当前位置: 首页 > 知识库问答 >
问题:

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

公孙慎之
2023-03-14

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

共有2个答案

柴琦
2023-03-14

在与同事讨论后,我发现我可以通过拨打电话来运行rails服务器

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

从我的项目目录中。所以我甚至不需要运行rails.bat脚本。希望这能帮助某人

宣意致
2023-03-14

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

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有效,但我不知道有什么更好的方法来处理它。但遗憾的是,这一点以前没有得到解决

 类似资料:
  • 问题内容: 我有一个主类,期望使用-D选项传递某些属性。我可以通过将其作为VM选项发送来在IDE中访问它。 我使用Maven并在尝试以下操作时将此应用程序打包到jar文件中: 要么 没有获取环境系统属性。 关于发生了什么的任何指示? 问题答案: 在。之前传递参数。如果在jar文件之后传递它们,它们将被解释为命令行参数并传递给in 。喜欢,

  • 问题内容: 好的,所以我想将一个非常基本的数组传递到jquery数据attrubute服务器端,如下所示: 然后像这样回撤: 为什么这似乎会警告’[‘而不是’a’(请参阅JSfiddle链接) JSFiddle链接: http : //jsfiddle.net/ktw4v/3/ 问题答案: 它将变量视为字符串,其第零个元素为。 发生这种情况是因为您的字符串不是有效的JSON,它应使用双引号而不是单

  • 在使用PingFederate进行单点登录期间,我需要将数据从一个系统传递到另一个系统。 目前我的链接如下所示: 目标资源,解码,如下所示: pingfederate处理请求后,它最终会向其他公司发送一封邮件,将整个TargetResource复制到RelayState、params和all中: 我的目标是以某种方式将 paramOne 和 paramTwo 传递到 SAML 属性中,但不要将这些

  • Amazon EMR是否允许将系统属性传递给自定义jar,例如hadoop jar-Dkey=value-myjob。jar?(

  • 问题内容: 我有以下控制器: 我想将绑定的ng模型传递给以下服务,该模型位于我的视图中… 如何连接控制器的作用域以传递到服务中?谢谢! 问题答案: 如何在angularjs中将范围从控制器传递到服务? 您不能将$ scope注入服务,没有像Singleton $ scope这样的东西。 我想将绑定的ng模型传递给以下服务,该模型位于我的视图中,即ng-model =“ symbol_wanted”