我有这个rails应用程序在我们的本地Intranet上运行,有一千个普通用户.我希望将它与我们的电子邮件服务器(MS Exchange)集成.基本上 -
1)对于每个用户,应用程序应从邮件服务器获取其收件箱中的任何新邮件,解析它并将其存储在数据库中.
我可以用ruby/net-imap实现它,但我担心性能.正如我所提到的,有一千个用户,每个用户都有不同的电子邮件地址.每隔x分钟轮询一次电子邮件服务器对于一千个用户来说可能会大大降低性能.
看起来IMAP IDLE与ruby/net-imap可能是一个选项,邮件服务器会在有新邮件(IPhone/Outlook样式)时向我的应用程序发送通知.但似乎,因为我必须保持与服务器的imap连接打开.因此,如果一次有100个用户登录,则意味着100个与邮件服务器的连接.这会大大减慢应用程序的速度吗?
或者有没有人知道任何其他选项(顺便说一下,我无法控制邮件服务器)
我们正在使用MRI,但也可以轻松切换到jruby.
我设置了正确的SDK,因为我的所有ruby代码都会编译但是RubyMine抱怨它找不到我的任何java类?这是一个缺陷,还是有办法让它认识到这些类是什么?
这是我的代码,我强调了所有抱怨的事情
require 'java'
include_class 'java.awt.event.ActionListener'
include_class 'javax.swing.JButton'
include_class 'javax.swing.JFrame'
class ClickAction
include ActionListener
def action_performed(event)
puts "Button got clicked."
end
end
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,因为我想购买RubyMine,如果它能够通知我可以选择哪些Java类和方法.谢谢
我想使用JRuby创建一个Java applet.也就是说,我想在JRuby运行的Ruby代码中创建一个Java applet来完成所有的GUI工作.我正在寻找一个简单的例子来说明如何开始这个.
我正在为我在JRuby中创建的库编写Java包装器,我无法读取JAR中的文件.
我已经打开了JAR,文件就在那里,位于JAR的根文件夹中.
但是,当我尝试运行时:
File.read("myfile.txt")
Run Code Online (Sandbox Code Playgroud)
它会引发以下错误:
C:\temp>java -jar c:\libraries\XmlCompare.jar
file:/C:/libraries/XmlCompare.jar!/lib/xmlcompare/app.rb:19:in `initialize':
No such file or directory - myfile.txt (Errno::ENOENT)
Run Code Online (Sandbox Code Playgroud)
我甚至试图使路径绝对(假设文本文件位于根目录,正在执行的ruby源位于lib/xmlcompare中),通过执行以下操作:
File.read("#{File.dirname(__FILE__)}/../../myfile.txt")
Run Code Online (Sandbox Code Playgroud)
但后来我得到:
C:\temp>java -jar c:\libraries\XmlCompare.jar
file:/C:/libraries/XmlCompare.jar!/lib/xmlcompare/app.rb:19:in `initialize':
No such file or directory -
file:/C:/libraries/XmlCompare.jar!/lib/xmlcompare/../../myfile.txt
(Errno::ENOENT)
Run Code Online (Sandbox Code Playgroud)
我对如何使这项工作有任何想法?
我正试图在jruby中使用Java Opencl,但遇到了一个我无法解决的问题,即使有很多谷歌搜索.
require 'java'
require 'JOCL-0.1.7.jar'
platforms = org.jocl.cl_platform_id.new
puts platforms.class
org.jocl.CL.clGetPlatformIDs(1, platforms, nil)
Run Code Online (Sandbox Code Playgroud)
当我使用以下命令运行此代码时:jruby test.rb当取消注释最后一行时,我收到以下错误:
#<Class:0x10191777e>
TypeError: cannot convert instance of class org.jruby.java.proxies.ConcreteJavaP
roxy to class [Lorg.jocl.cl_platform_id;
LukeTest at test.rb:29
(root) at test.rb:4
Run Code Online (Sandbox Code Playgroud)
只是想知道是否有人知道如何解决这个问题?
编辑:好吧所以我想通过使平台成为一个数组我已经解决了这个问题的第一部分:
platforms = org.jocl.cl_platform_id[1].new
Run Code Online (Sandbox Code Playgroud)
但是在添加下几行时会导致此错误:
context_properties = org.jocl.cl_context_properties.new()
context_properties.addProperty(org.jocl.CL::CL_CONTEXT_PLATFORM, platforms[0])
Run Code Online (Sandbox Code Playgroud)
CodegenUtils.java:98:in `human': java.lang.NullPointerException
from CodegenUtils.java:152:in `prettyParams'
from CallableSelector.java:462:in `argumentError'
from CallableSelector.java:436:in `argTypesDoNotMatch'
from RubyToJavaInvoker.java:248:in `findCallableArityTwo'
from InstanceMethodInvoker.java:66:in `call'
from CachingCallSite.java:332:in `cacheAndCall'
from CachingCallSite.java:203:in `call'
from test.rb:36:in `module__0$RUBY$LukeTest'
from test.rb:-1:in `module__0$RUBY$LukeTest'
from test.rb:4:in `__file__' …Run Code Online (Sandbox Code Playgroud) # some java_imports here
index = RAMDirectory.new
IndexWriter.new(index, StandardAnalyzer.new(Version::LUCENE_30), IndexWriter::MaxFieldLength::UNLIMITED )
IndexSearcher.new(index)
Run Code Online (Sandbox Code Playgroud)
生成
NativeException: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@668c640e lockFactory=org.apache.lucene.store.SingleInstanceLockFactory@afd07bb: files: []
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
当我运行我的rails控制台时,我得到了这样的东西:
Loading development environment (Rails 3.2.3)
/Users/sebastiannowak/.rvm/gems/jruby-1.6.7@global/gems/bundler-1.1.0/lib/bundler.rb:254 warning: shadowing outer local variable - path
Switch to inspect mode.
Time.now
Time.now
2012-06-27 09:27:21 +0200
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我可以与控制台进行交互,但它非常不舒服.我运行JRuby 1.6.7.有人有这样的问题吗?
我想我可能在Warbler中发现了一个错误,但我想在这里发布这个问题以防万一我做错了.简而言之,任何尝试将需要"bson"gem的jruby应用程序打包到带有warbler的.jar文件中的尝试都会失败.这是我每次都得到的错误:
LoadError: no such file to load -- jar:file:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/gems/bson-1.8.0-java/lib/../ext/java/jar/mongo-2.6.5 ...
Run Code Online (Sandbox Code Playgroud)
这是在OS X或Linux上重现问题的一组非常简单的步骤:
制作一个'wartest'目录并插入其中
使用bundler,创建一个名为'wartest'的新jruby-1.6.7.2 gemset.那么'rvm使用jruby-1.6.7.2@wartest'
安装warbler和bundler:
jruby --1.9 -S gem install warbler
jruby --1.9 -S gem install bundler
Run Code Online (Sandbox Code Playgroud)
只是为了确认它的工作原理:
which warble
#=> /Users/jstokes/.rvm/gems/jruby-1.6.7.2@wartest/bin/warble
Run Code Online (Sandbox Code Playgroud)
现在创建以下两行Gemfile:
#Gemfile
source 'http://rubygems.org'
gem 'bson'
Run Code Online (Sandbox Code Playgroud)
现在'捆绑安装'
现在创建一个bin目录并创建文件bin/main.rb.然后粘贴以下内容:
#bin/main.rb
require 'bson'
puts 'It worked!'
Run Code Online (Sandbox Code Playgroud)
此时,我们已准备好创建jar文件.那样做
jruby --1.9 -S warble jar
#=> rm -f wartest.jar
#=> Creating wartest.jar
Run Code Online (Sandbox Code Playgroud)
现在是时候了:
java -jar wartest.jar
#=> It worked!
Run Code Online (Sandbox Code Playgroud)
所以有什么问题?问题是,如果你换到另一个gemset,或者使用系统ruby,它会爆炸.注意:
rvm use system
#=> Now using system ruby.
java -jar wartest.jar
Run Code Online (Sandbox Code Playgroud)
LoadError: …
在将Rails 3.2项目部署到Weblogic 10.3时遇到此问题,并且正在寻找一个简单的答案.
org.jruby.exceptions.RaiseException: (NameError) ActiveRecord is not missing constant Base!
at RUBY.load_missing_constant(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:494)
at RUBY.const_missing(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:192)
at org.jruby.RubyArray.each(org/jruby/RubyArray.java:1613)
at RUBY.const_missing(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:190)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/meta_search-1.1.3/lib/meta_search.rb:55)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at ActiveSupport::Dependencies::Loadable.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251)
at ActiveSupport::Dependencies::Loadable.load_dependency(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:236)
at ActiveSupport::Dependencies::Loadable.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activeadmin-0.5.0/lib/active_admin.rb:1)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at ActiveSupport::Dependencies::Loadable.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251)
at ActiveSupport::Dependencies::Loadable.load_dependency(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:236)
at ActiveSupport::Dependencies::Loadable.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activeadmin-0.5.0/lib/active_admin.rb:1)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activeadmin-0.5.0/lib/activeadmin.rb:1)
at org.jruby.RubyArray.each(org/jruby/RubyArray.java:1613)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/activeadmin-0.5.0/lib/activeadmin.rb:1)
at org.jruby.RubyArray.each(org/jruby/RubyArray.java:1613)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler/runtime.rb:1)
at RUBY.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler/runtime.rb:68)
at RUBY.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler/runtime.rb:66)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at RUBY.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler/runtime.rb:55)
at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027)
at RUBY.require(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/gems/gems/bundler-1.2.3/lib/bundler.rb:128)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/config/application.rb:13)
at RUBY.(root)(<app_deploy_dir>/<app_name>/mfey8c/war/WEB-INF/config/environment.rb:1)
Run Code Online (Sandbox Code Playgroud)
环境看起来像这样:JRuby 1.7.2,JRockit 1.6,Rails 3.2.9,Warbler
我部署了基本的2模型加设计用户项目,当我在浏览器中浏览它时会发生此错误.谁看过这个吗?这是我第一次使用JRuby.
编辑:
添加我最近的失败尝试.请注意,我已经尝试过jruby,jruby-jar,分别为1.6.8,1.7.0,1.7.2并没有成功.这是我的Gem文件和Warbler配置:
#source 'https://rubygems.org'
source "http://bundler-api.herokuapp.com" …Run Code Online (Sandbox Code Playgroud) 我有一个Java HashMap,我在JRuby,我试图将其转换为JSON,但它没有正确转换,我认为这个例子显示了问题:
$ irb [17:23:50]
irb(main):001:0> require 'java'
=> false
irb(main):003:0> require 'json'
=> true
irb(main):005:0> h = java.util.HashMap.new()
=> {}
irb(main):006:0> x = {}
=> {}
irb(main):007:0> JSON.parse JSON.dump x
=> {}
irb(main):008:0> JSON.parse JSON.dump h
JSON::ParserError: unexpected token at '"{}"'
from json/ext/Parser.java:251:in `parse'
from /Users/kimptoc/.rvm/rubies/jruby-1.7.3/lib/ruby/1.9/json/common.rb:155:in `parse'
from (irb):9:in `evaluate'
from org/jruby/RubyKernel.java:1066:in `eval'
from org/jruby/RubyKernel.java:1409:in `loop'
from org/jruby/RubyKernel.java:1174:in `catch'
from org/jruby/RubyKernel.java:1174:in `catch'
from /Users/kimptoc/.rvm/rubies/jruby-1.7.3/bin/irb:13:in `(root)'
irb(main):010:0> JSON.dump h
=> "\"{}\""
Run Code Online (Sandbox Code Playgroud)
关于如何处理这个问题的任何想法 - 我是否需要将地图转换为Ruby地图?
谢谢,克里斯