在使用Cucumber,RSpec和Ruby BDD在Ruby on Rails中做一些事情之后,在我的Java应用程序中回到JUnit对我来说感觉非常痛苦.我非常喜欢Ruby为测试带来的便利.
根据我的理解,理论上应该可以使用Cucumber功能,甚至可以使用纯Java应用程序进行RSpec模拟.
是否有人在生产中使用Cucumber和Java应用程序?
上次当我尝试将JRuby攻击到Java时,它正在Google App Engine上运行,这实际上有效,但App Engine 启动时间增加了大约10秒,这使得它毫无用处.
我不只是谈论Web应用程序.
我一直在环顾四周,似乎无法找到任何看似"最新"的明确答案或进展.我见过一些有趣的项目,比如Mirah(以前的Duby),我正在调查一下.我见过JRuby用于将ruby编译成.dex失败了.我也一直在寻找Clojure,并意识到他们可能都与同一件事有关.
有没有人有关于如何开始并取得进展的任何提示?我不仅要问哪些框架可以提供帮助,更重要的是,我还要提出一个指导我的努力的理念/方向,以便开始.
我正在尝试将rails应用程序转换为jruby on rails.目前,jruby script/delayed_job run
给出:
/usr/lib/jruby/lib/ruby/gems/1.8/gems/delayed_job-2.0.3/lib/delayed/command.rb:50:in `each_object': ObjectSpace is disabled; each_object will only work with Class, pass -X+O to enable (RuntimeError)
from /usr/lib/jruby/lib/ruby/gems/1.8/gems/delayed_job-2.0.3/lib/delayed/command.rb:50:in `daemonize'
from script/delayed_job:5
Run Code Online (Sandbox Code Playgroud)
jruby有一个像delayed_job这样的宝石吗?
我正在尝试在JRuby类中实现Java接口,如下所示:
require 'java'
java_package 'net.jruby.test'
java_import "net.jruby.test.Service"
class RubyService
include Service
java_signature 'int sum(int, int)'
def sum(a,b)
a + b
end
end
Run Code Online (Sandbox Code Playgroud)
该net.jruby.test.Service接口是死的简单:
package net.jruby.test;
public interface Service
{
int sum(int a, int b);
}
Run Code Online (Sandbox Code Playgroud)
之后我生成.java类文件:
jrubyc --java ruby_service.rb
但是生成的.java文件(以及因此的.class文件)没有实现接口,看看:
public class RubyService extends RubyObject {
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
目前我们在JRuby中使用Resque,我们在开发时使用两种方式启动Worker.
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:workRun Code Online (Sandbox Code Playgroud)
def start
@worker = Resque::Worker.new(@queues)
@worker.verbose = @vervose
@worker.work(@interval)
end
def stop
@worker.try(:shutdown)
end
Run Code Online (Sandbox Code Playgroud)
虽然这两种解决方案都适合我们开发.我担心在部署到Tomcat时这将如何工作.
在Ruby中,通常会产生或妖魔化工作者,然后使用监视工具来监视pid.
在部署时以编程方式启动Workers是否有意义?我想知道它是否在java中启动一个新线程或者混乱了jruby进程,如果不是我应该使用,还有另一个像quartz这样的调度库来启动一个worker?或者在部署任务中启动的rake任务?
我可以创建一个Worker模型,然后跟踪数据库中的worker,但这对我没有意义.
任何帮助或知识将不胜感激.
谢谢.
参考文献:
https://github.com/defunkt/resque
http://rubydoc.info/github/defunkt/resque/master/Resque/
http://blog.thomasmango.com/post/636319317/resque-in-production
有没有Java以外的语言在没有脚本层/ AIR和其他第三方抽象的情况下在android中开发本机应用程序.
我最感兴趣的是Clojure,JRuby,Scala
我可以jruby-complete从传递给它的jar中消耗宝石.但我想使用一个中央宝石回购.
这就是我现在能做的:
$ java -jar jruby-complete-1.6.5.jar -S gem list
*** LOCAL GEMS ***
rake (0.8.7)
sources (0.0.1)
$ java -jar jruby-complete-1.6.5.jar -rjar_of_gems.jar -S gem list
*** LOCAL GEMS ***
erubis (2.7.0)
mizuno (0.4.1)
rack (1.4.0)
rack-protection (1.2.0)
rake (0.8.7)
rna (0.0.101)
sinatra (1.3.2)
sources (0.0.1)
tilt (1.3.3)
Run Code Online (Sandbox Code Playgroud)
每次更新gem或者需要添加gem时都必须更改jar文件比我想做的更开销.
任何建议,必须有一种方法jruby-complete来指向像常规jruby宝石回购?
我使用以下Gemfile设置了一个基本的Rails应用程序:
source 'https://rubygems.org'
ruby '1.9.3', engine: 'jruby', engine_version: '1.7.0'
gem 'rails', '3.2.8'
Run Code Online (Sandbox Code Playgroud)
每当我切换到项目目录时,我都会收到以下消息:
未知的ruby解释器版本:'1.9.3,引擎:jruby,engine_version:1.7.0'.
我正在运行RVM 1.16.17并安装了'jruby-1.7.0'.我的Gemfile引擎是否配置错误或我是否需要在RVM中更改某些内容?
我正在尝试使用rake中的JavaFX的ant任务,并且无法弄清楚如何处理xml-namespacing:http://ant.apache.org/manual/Types/namespace.html
执行类似工作的build.xml文件看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorldApp" default="default" basedir="."
xmlns:fx="javafx:com.sun.javafx.tools.ant">
<path id="fxant">
<filelist>
<file name="${java.home}\..\lib\ant-javafx.jar"/>
<file name="${java.home}\lib\jfxrt.jar"/>
</filelist>
</path>
<target name="default">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${java.home}\..\lib\ant-javafx.jar"/>
</target>
<target name="package-bundle">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${java.home}\..\lib\ant-javafx.jar"/>
<fx:deploy nativeBundles="all"
width="100" height="100"
outdir="build/" outfile="HelloWorldApp">
<info title="Hello World App" vendor="Me"
description="Test built from Java executable jar"/>
<fx:application mainClass="org.jruby.JarBootstrapMain"/>
<fx:resources>
<fx:fileset dir="dist">
<include name="HelloWorldApp.jar"/>
</fx:fileset>
</fx:resources>
</fx:deploy>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
问题出现在像"fx:deploy"这样的任务中,当我开始将它转换为Rakefile时,我无法走远,因为我无法弄清楚如何告诉ant关于那个"fx"命名空间.我已经搜索了几天,但我发现的所有内容都是来自headius的一篇博文,上面写着"自我注意:弄明白我们是否有相同的东西"(http://headius.blogspot.com /2010/04/using-ivy-with-jruby-15s-ant.html).在他的例子中,他似乎能够忽略它,但在这种情况下这不起作用.
JavaFX打包任务提供了一些非常酷的东西,特别是从Java 8开始,包括从任何可执行jar为每个平台创建本机安装程序的能力.我认为这可能非常有用.
我正在使用Net :: IMAP.fetch从Gmail获取一些邮件.但是,当我获取具有UTF8主题的消息(即,在西里尔文中)时,我得到这样的内容:
=?UTF-8?B?0KHRgNC/0YHQutC4INGE0L7RgNGD0Lwg0YLRgNCw?= =?UTF-8?B?0LbQuCDQuNC30LHQvtGA0L3QuCDQvNCw0YLQtdGA0Lg=?= =?UTF-8?B?0ZjQsNC7INC4INC90LAg0ZvQuNGA0LjQu9C40YY=?= =?UTF-8?B?0LggLSBjaXJpbGFjZSB0ZXN0?=
Run Code Online (Sandbox Code Playgroud)
如何将上述字符串转换为UTF8?
注意:这适用于ruby 1.8.7