JRuby 9.0.5.0无法加载编译的ruby文件

时间:2016-02-26 17:12:32

标签: java ruby-on-rails jruby

我们的应用程序是一个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。

谢谢。

1 个答案:

答案 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问题......