我们的应用程序是一个RoR应用程序,目前使用JRuby版本1.7.22和JRE 8_65。我们的应用程序是一个本地解决方案,因此我们使用JRuby在目标Windows Server 2012 R2系统上的JVM上托管我们的应用程序。我们使用
编译我们的ruby代码jruby -S jrubyc
这将获取.rb文件并将其编译为.class文件。在原始的.rb中,它会加载到类文件中,就像这样。
load __FILE__.sub(/\.rb$/, ".class")
这一切都适用于JRuby 1.7.22
现在,我们希望将JRuby更新为9.0.5.0,但在部署应用程序时遇到一些问题。基本上,.rb文件内部的那行代码不再起作用了,我们在尝试运行rake db时遇到错误:setup
rake aborted!
LoadError: C:/appname/app/models/app_attribute.class is not compiled Ruby; use java_import to load normal classes
C:/appname/app/models/app_attribute.rb:1:in `<top>'
C:/appname/db/seeds.rb:10:in `<top>'
C:/appname/db/seeds.rb:9:in `block in (root)'
Tasks: TOP => db:setup => db:seed
(See full trace by running task with --trace)
大。所以我用java_import替换load
rake aborted!
ArgumentError: not a valid Java identifier: C:/appname/app/models/app_attribute.class
uri:classloader:/jruby/java/core_ext/object.rb:43:in `block in java_import'
uri:classloader:/jruby/java/core_ext/object.rb:34:in `java_import'
C:/appname/app/models/app_attribute.rb:1:in `<top>'
C:/appname/db/seeds.rb:10:in `<top>'
C:/appname/db/seeds.rb:9:in `block in (root)'
Tasks: TOP => db:setup => db:seed
(See full trace by running task with --trace)
无论我尝试什么,仍然无法正常工作。我查看了这篇文章:https://github.com/jruby/jruby/issues/3018 我试图传递参数
jruby -Xaot.loadClasses=true
但我收到警告说aot.LoadClasses无法识别。即使我输入
,我也会在属性中看到它jruby -Xproperties
我已经对此进行了大量研究,并且可能已经在互联网上查看过这方面的所有内容。任何输入将不胜感激。有什么我想念的吗?我并不擅长Java。
谢谢。
答案 0 :(得分:0)
可能与https://github.com/jruby/jruby/issues/3651
的问题相同这意味着您需要等待9.1或使用快照http://ci.jruby.org/
因为,错误略有不同,您应该考虑使用快照进行复制,如果失败(可能与Windows相关),逐步复制可能会加速解决问题。
jruby -Xaot.loadClasses = true
Warbler
不需要这样做嗯,你能用空脚本重现这个吗?没有但我收到警告说aot.LoadClasses无法识别。即使我输入
,我也会在属性中看到它
JRUBY_OPTS
?
我已经对此进行了大量研究,并且可能已经在互联网上查看过这方面的所有内容。任何输入将不胜感激。
您可能想尝试下次查看问题:)或考虑获得一些支持
我有遗漏的东西吗?我并不擅长Java。
你不应该错过任何东西 - 它不是Java问题......