我有一个混合Web应用程序,它在同一个Tomcat中运行Java WAR文件和JRuby WAR文件.
我们决定使用(JRuby)Resque作为我们的工作队列.对入队作业的调用如下所示:
Resque.enqueue(FooWorker, 111)
Run Code Online (Sandbox Code Playgroud)
其中FooWorker是JRuby端定义并使用的工作类(并包含在JRuby WAR文件中),当JRuby Resque rake任务处理队列中的作业时,它将被调用.
我想让Java代码能够将要由JRuby FooWorker类处理的Resque队列上的任务排队.
我在https://github.com/tc/call-jruby-from-java-example上查看了Tommy Cheng的代码.java文件
//JavaInterfaceExample.java
interface JavaInterfaceExample{
int add(int a, int b);
}
Run Code Online (Sandbox Code Playgroud)
和ruby文件
#JrubyAdderImpl.rb
require 'java'
class JrubyAdderImpl
include Java::JavaInterfaceExample
java_signature 'int add(int, int)'
def add(a, b)
a+b
end
end
Run Code Online (Sandbox Code Playgroud)
我怀疑我的代码看起来像:java文件
//ResqueInterfaceExample.java
interface ResqueInterfaceExample{
int resque_enqueue_foojob(int a);
}
Run Code Online (Sandbox Code Playgroud)
红宝石文件
#JrubyResqueImpl.rb
require 'java'
require 'resque'
class JrubyResqueImpl
include Java::ResqueInterfaceExample
java_signature 'int resque_enqueue_foojob(int)'
def resque_enqueue_foojob(a)
Resque.enqueue(FooWorker, a)
end
end
Run Code Online (Sandbox Code Playgroud)
我的FooWorker是一个类,它位于rails app的爆炸war文件目录中,文件是app/workers/foo_worker.rb
我需要做些什么来确保jruby编译器可以访问FooWorker和Resque JRuby类来正确编译代码?
我在config.threadsafe!启用了线程模式()的JRuby 1.7上将Puma与Rails3一起使用 。
现在,随着理论的发展:对于传入的多个客户请求,将使用新线程来服务用户,而不是每次都启动新的Rails流程。
如果要查找此新请求线程的ID,该怎么办?
multithreading ruby-on-rails jruby jrubyonrails ruby-on-rails-3
我首先使用 sudo apt-get install jruby 命令安装了 jruby,它成功了,但当我想要更高版本时,它确实给了我 1.5.6 版本。所以我卸载了它并使用 rvm install jruby 命令,我能够安装 jruby 版本 1.7.19,但是在安装它之后,我的 ruby 应用程序开始产生错误,抱怨缺少像 mysql2 gem 这样的 gem 丢失,运行 bundle install。我运行 bundle install 但我所做的似乎没有任何帮助,我无处可去。当我要求 ruby 版本时,我收到的是 jruby 版本,它的 lyk jruby 覆盖了 ruby,,,, 所以我决定卸载 jruby,重新安装 ruby,现在 ruby 的功能和以前一样。任何人都可以帮助我使用 ubuntu 命令来帮助我安装 jruby 和 ruby,这样两者都可以正常工作而没有任何错误???我请求认真的帮助
我是Ruby的新手,我在Ruby中使用HashWithIndifferentAccess作为哈希特性.所以我的代码就像:
def someFunction
array_list = []
some_array.each do | x |
new_hash = HashWithIndifferentAccess.new
// add entries to new_hash
array_list.push(new_hash)
end
array_list
end
Run Code Online (Sandbox Code Playgroud)
问题是:对于每次迭代我都在初始化新哈希,但如果我这样做,则array_list中的条目变为空:
def someFunction
array_list = []
new_hash = HashWithIndifferentAccess.new
some_array.each do | x |
// add entries to new_hash
array_list.push(new_hash)
new_hash.clear
end
array_list
end
Run Code Online (Sandbox Code Playgroud)
我不想为每次迭代初始化新的哈希,这个问题的解决方案是什么?