我试图了解MRI Ruby 1.8和JRuby之间不同线程模型的实际影响.
作为开发人员,这对我来说意味着什么?
而且,由于不同的线程模型,MRI Ruby 1.8中的代码是否有任何实际的JRuby性能特征?
我有这个rails应用程序在我们的本地Intranet上运行,有一千个普通用户.我希望将它与我们的电子邮件服务器(MS Exchange)集成.基本上 -
1)对于每个用户,应用程序应从邮件服务器获取其收件箱中的任何新邮件,解析它并将其存储在数据库中.
我可以用ruby/net-imap实现它,但我担心性能.正如我所提到的,有一千个用户,每个用户都有不同的电子邮件地址.每隔x分钟轮询一次电子邮件服务器对于一千个用户来说可能会大大降低性能.
看起来IMAP IDLE与ruby/net-imap可能是一个选项,邮件服务器会在有新邮件(IPhone/Outlook样式)时向我的应用程序发送通知.但似乎,因为我必须保持与服务器的imap连接打开.因此,如果一次有100个用户登录,则意味着100个与邮件服务器的连接.这会大大减慢应用程序的速度吗?
或者有没有人知道任何其他选项(顺便说一下,我无法控制邮件服务器)
我们正在使用MRI,但也可以轻松切换到jruby.
这应该相当容易,但出于某种原因,我尝试的几乎所有内容似乎都在我将其连接到Web浏览器时发出"未找到"错误.
我有一个静态上下文,对于ResourceBase,我有'file:jar:/ path/to/myjar!/.'...任何想法,我缺少什么?
据我了解JRuby,完全可以在JRuby代码中使用Java类,反之亦然,但是,我仍然不了解一些东西.
我只是试图了解SSL.
我在localhost上设置了一个Jetty服务器,并使用Keytool生成了我自己的证书.
现在,当我去https:// localhost:8443 /我得到的不能相信这个证书错误.
我用
keytool -export -alias pongus -keystore keystore -file certfile.cer
创建我认为是客户端需要对服务器进行身份验证的证书.(这是我可能非常错的地方!)
我有以下ruby代码:
require 'net/https'
require 'openssl'
require 'open-uri'
puts 'yay' if File.exists?('certfile.cer')
uri = URI.parse("https://localhost:8443/")
http_session = Net::HTTP.new(uri.host, uri.port)
http_session.use_ssl = true
http_session.verify_mode = OpenSSL::SSL::VERIFY_PEER
http_session.ca_file = 'certfile.cer'
res = http_session.start do |http|
# do some requests here
http.get('/')
end
Run Code Online (Sandbox Code Playgroud)
这会打印'yay',因此certfile.cer文件确实存在.
但是我得到了错误
/Applications/NetBeans/NetBeans 6.8.app/Contents/Resources/NetBeans/ruby2/jruby-1.4.0/lib/ruby/1.8/net/http.rb:586 warning: can't set verify locations
/Applications/NetBeans/NetBeans 6.8.app/Contents/Resources/NetBeans/ruby2/jruby-1.4.0/lib/ruby/1.8/net/http.rb:586:in `connect': certificate verify failed (OpenSSL::SSL::SSLError)
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
编辑
我想得到它所以我保证我连接到正确的服务器,服务器可以保证我连接到它,没有任何篡改.我正在开发服务器和客户端.
我必须等待很长时间(与我的朋友机器相比)在jRuby上执行脚本,特别是在我运行rake任务或测试时.我试过jRuby版本1.3.1和1.4.1有和没有ruby-debug gem,每个配置都出现同样的问题.
问题很简单:有没有办法改进jRuby加载过程?..或者我的jvm配置或jRuby安装有什么问题(我通过rvm使用jRuby - ruby版本管理器)?
在是否有优势,运行JRuby,如果你不知道任何Java?如果你只是想要比"Ruby"(MRI/YARV)更好地实现Ruby,人们建议使用JRuby.
没有使用JRuby会有什么潜在的原因?
其他人提到的有:
我可能的原因包括:
你有没有其他理由不使用JRuby?
我有一个Java库,我正在从中提取一些数据.
它出了一个3D数组.但是我无能为力.
[[D[]@5615a6e0
Run Code Online (Sandbox Code Playgroud)
是我得到的回应.我试过映射它:
{ |arr| arr.map { |arr| arr.to_a } }
Run Code Online (Sandbox Code Playgroud)
但我什么都没得到,解析这个java数组的最佳方法是什么?
我是Java世界的新手,但我熟悉Ruby.我正在尝试编写一个与某些第三方jar文件交互的程序.
虽然从Java调用库似乎表现得很好,但是当我在JRuby中调用它们时它们的行为不正确.这是一个问题因为我真的想使用JRuby.例如,下面的两个程序尝试完全相同的东西,但它们产生不同的输出:
我在Netbeans中开发了下面的Java程序,然后按F6(运行主项目)运行它.项目的Libraries文件夹设置为"C:\ Program Files(x86)\ Microchip\MPLABX\mplab_ide\lib \nblibraries.properties".当我运行它时,它会打印"pins:17".
package pinbug1;
import com.microchip.mplab.mdbcore.assemblies.Assembly;
import com.microchip.mplab.mdbcore.assemblies.AssemblyFactory;
import com.microchip.mplab.mdbcore.simulator.PinSet;
import com.microchip.mplab.mdbcore.simulator.Simulator;
import org.openide.util.Lookup;
public class PinBug1
{
public static void main(String[] args)
{
AssemblyFactory assemblyFactory = Lookup.getDefault().lookup(AssemblyFactory.class);
Assembly assembly = assemblyFactory.Create("PIC18F14K50");
Simulator simulator = assembly.getLookup().lookup(Simulator.class);
int num = simulator.getDataStore().getProcessor().getPinSet().getNumPins();
System.out.println("pins: " + num); // prints "pins: 17"
}
}
Run Code Online (Sandbox Code Playgroud)
我只需输入就运行下面的JRuby程序jruby bug_reproduce.rb并打印"pins:0".我希望它像Java程序一样打印"pins:17".
["mplab_ide/mdbcore/modules/*.jar",
"mplab_ide/mplablibs/modules/*.jar",
"mplab_ide/mplablibs/modules/ext/*.jar",
"mplab_ide/platform/lib/org-openide-util*.jar",
"mplab_ide/mdbcore/modules/ext/org-openide-filesystems.jar"
].each do |pattern|
Dir.glob("C:/Program Files (x86)/Microchip/MPLABX/" + pattern).each do |x|
require x
end
end …Run Code Online (Sandbox Code Playgroud) 我正在考虑将我们的ruby解释器更新为JRuby,因为我们必须从我们的应用程序中删除任何2.x特定语法并采用ruby 1.9.3兼容性,因此非常头疼.哪个不是世界末日.
当运行应用程序时,我发现我们不能在群集模式下使用Puma.问题是,鉴于过去几年MRI的所有修复和变化,"真实线程"仍然有效的好处是什么?
更新
为了使其更加客观,问题是,"最新版本的MRI是否否定了采用JRuby来实现本机线程为您提供的相同优势的必要性?"