标签: jruby

有关 Java 与 jRuby 互操作的参考信息的最佳来源

您发现什么是 jRuby 与 Java 互操作语法的最佳来源?昨天我花了很长时间才找到有关添加到类路径的内容,而 jruby.org 站点并没有太大帮助。好奇其他人使用的参考资料。谢谢。

ruby java jruby jruby-java-interop

5
推荐指数
1
解决办法
832
查看次数

将 JRuby-On-Rails 应用程序部署为战争时,将 sqlite3 数据库放在哪里?

背景:我想使用 warblers 可执行文件 war 部署一个小型 JRuby-On-Rails 应用程序,因此我可以删除 .war 文件,每个人都可以使用 .war 文件运行它java -jar app.war

应用程序使用sqlite3存储一些数据,production-db-file位于war内的WEB-INF/db。

每次启动应用程序时,winstone 都会将 war 解压到一个临时目录,如果应用程序第二次启动,则在此会话期间执行的所有操作都将丢失(因为生产数据库再次从 war 文件中解压)。

那么如何在每次应用程序启动时使用相同的 db 文件呢?

sqlite jruby jrubyonrails warbler winstone

5
推荐指数
1
解决办法
1060
查看次数

将clojure应用程序与Ruby on Rails应用程序相结合

我有一个Clojure后端,我想把一个Rails前端.我应该如何连接它们,具体如何?

在我的头顶,有两种方式:

  • 在与rails相同的过程中在轨道上运行Jruby
  • 运行正常的Ruby on Rails,并通过消息队列,Web挂钩和联合DB将其连接到clojure后端.

两者似乎都有缺点.在前者中,似乎运行jruby将限制我们可以重用的宝石,否则当图书馆作者没有完全兼容的东西时,我们的生产力就会降低.在后者中,我想我们会错过代码重用 - 可能必须在某些情况下实现两次相同的东西 - 并且更复杂的接口(Web钩子而不仅仅是函数调用)将花费我们.

最后,在JRuby的情况下,目前还不清楚如何实际连接这两者.两者都带有管理脚本:rake和leiningen,以及特定的存储库布局.我真的不怎么开始加入他们.建议和战争故事欢迎.

ruby ruby-on-rails jruby clojure jrubyonrails

5
推荐指数
1
解决办法
820
查看次数

如何在 JRuby on Rails 项目中正确添加到 CLASSPATH?

我通过在以下内容中添加了一些外部 jars 到我的 CLASSPATH 中config/application.rb

require 'java'
$CLASSPATH << "#{File.dirname(__FILE__)}/../backend/src/"
Dir["#{File.dirname(__FILE__)}/../backend/lib/*.jar"].each do |jar|
   require jar
end
Run Code Online (Sandbox Code Playgroud)

这在使用rails server. 加载来自 CLASSPATH 的 jar。但是,运行时rake未设置类路径。我该如何设置?特别是,我需要在加载我的 gem 之前设置它,因为我使用 JRClj gem,它依赖于我的 CLASSPATH 中已经有 clojure.jar。

(哦,我也尝试将代码放在 environment.rb 中;没有帮助)

“不工作”,我的意思是:

$ rake rspec --trace
rake aborted!
No such file to load -- /MY_CURRENT_WORKING_DIRECTORY/clojure.lang.RT
org/jruby/RubyKernel.java:1063:in `load'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:234:in `load'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:223:in `load_dependency'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:640:in `new_constants_in'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:639:in `new_constants_in'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:223:in `load_dependency'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:234:in `load'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/rake-0.9.2.2/lib/rake/default_loader.rb:6:in `load'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/rake-0.9.2.2/lib/rake/application.rb:569:in `load_imports'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/rake-0.9.2.2/lib/rake/application.rb:508:in `raw_load_rakefile'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `load_rakefile'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/pbiggar/.rvm/gems/jruby-1.6.5@jruby-clojure-combination/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile' …
Run Code Online (Sandbox Code Playgroud)

jruby jrubyonrails jruby-java-interop

5
推荐指数
1
解决办法
3528
查看次数

在Ruby中预先挂起数组中的每个元素

有没有办法用一些东西预先添加数组的每个元素.

例如:

file = File.new(my_file,'r')

header = IO.readlines(my_file)[1]  # header looks like [1,2,3]
#Prepend each elelement of header with filename, something like
header.prepend(filename+".")     #header looks like [filename.1,filename.2,filename.3]
Run Code Online (Sandbox Code Playgroud)

ruby jruby data-structures

5
推荐指数
1
解决办法
4305
查看次数

在 JRuby 中获取由字符串表示的 Java 类?(没有评估)

我想在 JRuby 中调用 Java 类的静态方法。目前为了实现这一点我使用:

class_name = "com.slackworks.naether.util.LogUtil"
clazz = eval(class_name)
clazz.setLogLevel( "debug" )
Run Code Online (Sandbox Code Playgroud)

必须使用 eval 将字符串转换为类似乎很笨拙。我环顾四周,但找不到 JRuby 助手来代替eval.


我需要将字符串转换为类的原因是,这种情况发生在通过 JRuby 或 RJB 处理请求的包装器中,具体取决于 Ruby 运行时。如果 Ruby 运行时使用 RJB,则调用将类似于:

class_name = "com.slackworks.naether.util.LogUtil"
clazz = Rjb::import( class_name )
clazz.setLogLevel( "debug" )
Run Code Online (Sandbox Code Playgroud)

reflection class jruby

5
推荐指数
1
解决办法
1122
查看次数

在所有处理器上运行ruby程序

我一直在寻找优化ruby程序,这个程序对很多数据来说都是计算密集型的.我不知道C并且选择了Ruby(不是我也很清楚)并且除了执行时间之外我对结果非常满意.这是一个很多数据,没有花钱,我想知道我能做些什么来确保我最大化自己的系统资源.

当我运行一个基本的Ruby程序时,它是否使用单个处理器?如果我没有专门为处理器分配任务,Ruby将无法读取我的程序并神奇地加载每个处理器以尽快完成程序吗?我假设没有......

我一直在阅读关于加速Ruby的一些内容,并在另一个线程中读到Ruby不支持真正的多线程(虽然它说JRuby确实如此).但是,如果我将我的程序"分解"为两个可以在不同实例中运行的块并以parralel运行它们......这两个块会自动在两个独立的处理器上运行吗?如果我有四个处理器并打开了四个炮弹并运行了四个独立的部分(1/4) - 它会在1/4的时间内完成吗?

更新

看完评论后,我决定给JRuby一个机会.移植应用程序并不困难.我还没有使用"桃子",但只需在JRuby中运行它,该应用程序运行时间为1/4!疯.我没想到会发生太大变化.现在给.peach打一针,看看它是如何改善的.仍然无法相信提振.

更新#2

刚试了一下桃子.结束剃须另外15%的时间.所以切换到JRuby并使用Peach绝对值得.

感谢大家!

ruby jruby

5
推荐指数
1
解决办法
1143
查看次数

为什么 RSpec 在 ruby​​ 中运行时会运行两次specs并且重新加载spec文件?

我尝试在现有的 ruby​​ 运行时中使用 RSpec,并在每次文件更改时运行规范。这是因为 JRuby 和 JVM 启动时间。为了在每次运行时消除这个问题,我想启动 ruby​​ 一次,然后只重新加载更改的文件并运行规范。我正在使用guard(具有不同的扩展)和watchr,但似乎都遇到了下面描述的问题。

我将问题归结为 RSpec 本身。问题是,当通过RSpec::Core::Runner.run多次运行 RSpec 时,它可以正常工作,直到使用load. 然后 RSpecs 开始运行规范两次。我创建了示例项目来实时显示此问题:https ://github.com/mostr/rspec_double_run_issue

以下是示例输出:

ruby run_spec_in_loop.rb 
Running spec from within ruby runtime
.
Finished in 0.00047 seconds
1 example, 0 failures

loading spec file via 'load' as if it was changed and we wanted changes to be picked up
Running spec from within ruby runtime
..
Finished in 0.001 seconds
2 examples, 0 failures
Run Code Online (Sandbox Code Playgroud)

当从现有的 ruby​​ 运行时运行时,有什么方法可以告诉 RSpec 在后续运行之间清除其上下文吗?我还将此作为 …

ruby rspec jruby guard

5
推荐指数
1
解决办法
895
查看次数

Ruby BasicObject 方法

在学习 Ruby 时,我发现 BasicObject 是 Class 的最顶级超类。当我尝试时 BasicObject.methods,我得到了这些方法的列表

[:method_missing, :singleton_method_added, :singleton_method_undefined, :singleton_method_removed, :new, :become_java!, :allocate, :superclass, :java_class, :class_variables, :<=, :public_instance_methods, :prepend, :class_variable_get, :public_constant, :singleton_class?, :instance_methods, :freeze, :instance_method, :const_defined?, :to_s, :constants, :ancestors, :private_instance_methods, :===, :included_modules, :==, :using, :class_eval, :const_get, :refine, :protected_instance_methods, :public_instance_method, :class_variable_defined?, :inspect, :name, :private_constant, :<, :hash, :>, :>=, :module_exec, :protected_method_defined?, :module_eval, :const_missing, :class_exec, :const_set, :private_method_defined?, :public_class_method, :autoload, :<=>, :include, :public_method_defined?, :autoload?, :class_variable_set, :include?, :remove_class_variable, :deprecate_constant, :private_class_method, :method_defined?, :include_class, :handle_different_imports, :java_kind_of?, :public_send, :frozen?, :protected_methods, :java_implements, :public_method, :java, :singleton_methods, :untaint, …
Run Code Online (Sandbox Code Playgroud)

ruby methods jruby

5
推荐指数
1
解决办法
163
查看次数

对 Java、Groovy、Jython 和 Python 进行基准测试

我正在尝试对 PI (3.14159) 投掷飞镖的蒙特卡罗计算进行基准测试。我已经用 Java、Groovy、BeanShell、Julia、Jython 和 Python(用 C 实现的 Python2)实现了我的代码。

这是我的原始 Java 代码“MonteCarloPI.java”:

import java.util.Random; 

public class MonteCarloPI {
     public static void main(String[] args)
       {
         int nThrows = 0;
         int nSuccess = 0;
         double x, y;
         long then = System.nanoTime();
         int events=(int)1e8;
         Random r = new Random(); 
         for (int i = 0; i < events; i++) {
            x = r.nextFloat();      // Throw a dart
            y = r.nextFloat();
            nThrows++;
            if ( x*x + y*y <= 1 )  nSuccess++;
       }
 double itime …
Run Code Online (Sandbox Code Playgroud)

python java groovy jython jruby

5
推荐指数
1
解决办法
2129
查看次数