对于Java生态系统中的开发人员,在UI设计方面有一些选择.最着名的是:
现在,有没有针对JRuby/Groovy/Jython或其他"动态"JVM语言的框架或设计替代方案?
一些UI框架是Swing或SWT上的层,例如,框架可以读取XML中的屏幕描述并实例化相应的Swing组件.
如果你知道这样的框架,但是它以JVM"动态"语言为目标,我也希望在答案中看到它们.
我在JRuby中安装了EventMachine(我正在使用Win32).当我尝试服务器示例时,我收到错误
require 'eventmachine'
Run Code Online (Sandbox Code Playgroud)
错误是:
C:\dev\em>jruby server.rb
Run Code Online (Sandbox Code Playgroud)
server.rb:1:在`require'中:没有要加载的文件 - 来自server.rb的eventmachine(LoadError):1
但宝石安装好了!
C:\dev\myapp>jruby -S gem install eventmachine
Successfully installed eventmachine-0.12.8-java
1 gem installed
Installing ri documentation for eventmachine-0.12.8-java...
Installing RDoc documentation for eventmachine-0.12.8-java...
Could not find main page README
Could not find main page README
Could not find main page README
Could not find main page README
Run Code Online (Sandbox Code Playgroud) 这有什么关系?我正在处理一个我没有做过的预先存在的事情.数据库中的所有内容都以单数形式标记.用户,安全,规格等我想正确的方法是用户,证券,规格.至少那就是当我生成一个脚手架时,ruby on rails尝试查找.
我如何明确声明在sql中使用用户而不是用户.我在项目的任何地方都没有看到它在查找sql.我的意思是如果我的模型是用户,你会认为它会尝试查找用户.而不是用户.
谢谢你的帮助.
我正在考虑使用Ruby(或jRuby)实现身份验证和用户管理,因为在撰写本文时我没有在两者之间做出决定.
Ruby/jRuby有哪些好的auth库?此外,由于我是一个Ruby-newb,我可以使用相同的库来处理ruby或jruby吗?
谢谢,亚历克斯
gem install 失败并出现以下错误,如何在公共位置指定堆大小配置,以便我不必每次都重新定义它.
Error: Your application used more memory than the safety cap of 500m.
Specify -J-Xmx####m to increase it (#### = cap size in MB).
Specify -w for full OutOfMemoryError stack trace.
Run Code Online (Sandbox Code Playgroud) 我有这个JRuby 工作代码(从Keith的博客中窃取),它包装了SAXON xslt处理器API.
现在,我想知道我是否可以,如何在Ruby框架中包装相同的API?
请告诉我这个问题是否无意义或是否可以某种方式改进.
这是所需API的java doc参考.
这是我正在使用的JRuby代码:
require 'java'
module JXslt
include_class "javax.xml.transform.TransformerFactory"
include_class "javax.xml.transform.Transformer"
include_class "javax.xml.transform.stream.StreamSource"
include_class "javax.xml.transform.stream.StreamResult"
include_class "java.lang.System"
class XsltProcessor
def transform(xslt,infile,outfile)
transformer = @tf.newTransformer(StreamSource.new(xslt))
transformer.transform(StreamSource.new(infile), StreamResult.new(outfile))
end
end # XsltProcessor
class Saxon < XsltProcessor
TRANSFORMER_FACTORY_IMPL = "net.sf.saxon.TransformerFactoryImpl"
def initialize
System.setProperty("javax.xml.transform.TransformerFactory", TRANSFORMER_FACTORY_IMPL)
@tf = TransformerFactory.newInstance
end
end
end
Run Code Online (Sandbox Code Playgroud) 我注意到即使在最新的1.6.4 jruby版本中也不支持在Ruby 1.9中使用新的lambda语法.所以,我猜这个语法在ruby社区中并不常用.是因为语法是新的还是有其他缺点?
x = -> y { y+1 }
x.call(2)
Run Code Online (Sandbox Code Playgroud)
这在ruby 1.9.1中返回3并在jruby 1.6.4中给出语法错误
我正在构建一个新的REST API,它将取代现有的REST API.较旧的API被编写为使用Java构建的SOAP API,这就是问题所在.大多数数据访问层库都是用Java编写的,如果我们可以使用这些库将是一个很好的资产.
到目前为止,我们的两个选项是:Ruby/Sinatra和Scala/Lift
我们还可以在Ruby/Sinatra堆栈上使用JRuby,以便使用我之前提到的Java库.我们主要担心的是可能的JRuby-Java库不兼容......
您认为最好的方法是什么?
我开始在我目前的项目中使用木偶,我遇到了一些问题.
我正在使用配方来安装jruby,但我想在完成jruby安装后设置一个环境变量(在这种情况下,JRUBY_HOME并修改PATH以包含JRUBY_HOME/bin).
这是食谱:
class jruby {
$jruby_home = "/opt/jruby"
exec { "download_jruby":
command => "wget http://jruby.org.s3.amazonaws.com/downloads/1.7.0.RC2/jruby-bin-1.7.0.RC2.tar.gz",
path => $path,
timeout => 0,
unless => "ls /opt | grep jruby-1.7.0",
require => Package["openjdk-7-jre-headless"]
}
exec { "unpack_jruby" :
command => "tar -zxf jruby-bin-1.7.0.RC2.tar.gz -C /opt",
path => $path,
creates => "${jruby_home}-1.7.0.RC2",
require => Exec["download_jruby"]
}
file { $jruby_home:
ensure => link,
target => "${jruby_home}-1.7.0.RC2",
require => Exec["unpack_jruby"]
}
}
Run Code Online (Sandbox Code Playgroud)
那么,将/ opt/jruby添加为JRUBY_HOME然后将JRUBY_HOME/bin添加到PATH的最佳方法是什么?
ruby jruby environment-variables puppet production-environment
我决定看看迭代一系列哈希需要多长时间.以下是代码:
pairs = [{name: "firstname", value: "string"},{name: "lastname", value: "string"},{name: "country", value: "string"},{name: "city", value: "string"},{name: "state", value: "string"},{name: "company", value: "string"},{name: "year", value: "string"},{name: "political_affiliation", value: "string"},{name: "social_security_number", value: "string"}] * 1000
blank = {}
start = Time.now
pairs.each do |pair|
blank[pair[:name]] = pair[:value]
end
p Time.now - start
Run Code Online (Sandbox Code Playgroud)
通过从循环之前的当前时间减去循环之后的当前时间来计算时间.
根据代码中的数学计算,这是YARV 2.1.1中计算所花费的时间:
0.001962017
Run Code Online (Sandbox Code Playgroud)
这是Rubinius 2.2.6花了多长时间:
0.022598
Run Code Online (Sandbox Code Playgroud)
和jRuby 1.7.12
0.022317
Run Code Online (Sandbox Code Playgroud)
据说Rubinius和jRuby比YARV具有性能优势.为什么他们花费的时间几乎是执行相同基本操作的12倍?这是正常的还是我有不正确的配置?