我想在Rails上试用JRuby和JRuby.我无法找到有关JRuby on Rails和Ruby on Rails之间区别的信息.
我需要注意哪些不同之处?
我在某个控制器中有一个动作,它在永久签名的cookie中设置了一些值,如下所示:
def some_action
cookies.permanent.signed[:cookie_name] = "somevalue"
end
在一些功能测试中,我试图测试cookie是否设置正确起诉:
test "test cookies" do
assert_equal "somevalue", cookies.permanent.signed[:cookie_name]
end
但是,当我运行测试时,我收到以下错误:
NoMethodError: undefined method `permanent' for #
如果我只尝试:
test "test cookies" do
assert_equal "somevalue", cookies.signed[:cookie_name]
end
我明白了:
NoMethodError: undefined method `signed' for #
如何在Rails 3中测试签名的cookie?
我有一个Rails 3.2.2应用程序,我希望使用JRuby 1.6.7(1.9.2模式)运行.
我有一个在MRI ruby 1.9.3中运行的示例应用程序,一个典型的请求在~40ms内返回:在36ms完成200 OK(浏览次数:27.5ms | ActiveRecord:8.2ms)
在JRuby下使用相同的请求可能会慢3到20倍,具体取决于页面.对于与上述相同的操作,需要~180ms:180ms内完成200 OK(浏览次数:153.0ms | ActiveRecord:24.0ms)
这是正常的性能差异吗?我已经读过JRuby与MRI的速度大致相等.结果保存在我的Mac和Windows服务器上(不幸的是,它需要运行).使用在Tomcat下运行的Warbler将其打包也同样缓慢.
以上时间来自为测试JRuby而创建的基本rails应用程序.在更复杂的应用程序上,时间甚至更远.在该应用程序上,有些页面上运行了更多的ruby代码.似乎页面越依赖于ruby,我观察到的性能差异就越大.我没有对JRuby进行调整,因为我不知道从哪里开始.
所以我的问题是:这是正常的吗?我该怎么做来调整JRuby?
我正在尝试将整个文件夹添加到我的Rails应用程序的JRuby 1.5类路径中.在JRuby的维基提出以下建议:"......添加config目录到JRuby的类路径config/environment.rb:"
$CLASSPATH << "file:///#{File.expand_path(File.join(RAILS_ROOT, 'config'))}/"
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不起作用.无论我是在Rails::Initializer.run块之前,之后还是之内放置它都没关系.无论如何,我得到:
/home/sean/src/sbruby/seo/config/environment.rb:45:NoMethodError: undefined method `<<' for nil:NilClass
/home/sean/apps/jruby/jruby-1.5.0/lib/ruby/gems/1.8/gems/rails-2.3.7/lib/rails/backtrace_cleaner.rb:2:NameError: uninitialized constant ActiveSupport::BacktraceCleaner
/home/sean/apps/jruby/jruby-1.5.0/lib/ruby/gems/1.8/gems/rails-2.3.7/lib/console_with_helpers.rb:5:NameError: uninitialized constant ApplicationController
Run Code Online (Sandbox Code Playgroud)
例如,我正在尝试在RAILS_ROOT被调用下添加一个文件夹resources/foobar,因此我将以下内容添加到environment.rb:
$CLASSPATH << "file:///#{File.expand_path(File.join(RAILS_ROOT, "resources", "foobar"))}/"
Run Code Online (Sandbox Code Playgroud)
同样的错误.
使用Rails将文件夹添加到JRuby类路径的正确方法是什么?
我在Rails上使用JRuby 1.5.6来构建一个应用程序,它会定期消失并检索我订阅过的任何RSS播客.
我选择JRuby主要是因为我熟悉Java,希望利用Rails框架,最重要的是,当Ruby达不到我的要求时,我能够用Java执行"繁重的"任务.到目前为止(我还处于开发的早期阶段),这种混合方法一直运行得非常好.
我现在正处于需要将后续和长期运行任务的调度实施到后台进程的程度.我的要求是拥有一个数据库支持的调度系统,理想情况下,该系统记录良好,当前维护和清理.
我现在的问题是,经过多天研究合适的自我宝石包装解决方案后,由于我使用JRuby,我似乎只剩下很少的选择.
我试过的一些宝石......
rufus调度程序
在使用它之前我对它的接口和文档感到满意,但是缺乏数据库持久性,因此对我的要求造成了破坏.
delayed_job的
我理想的解决方案是delayed_job.然而,由于ObjectSpace被关闭(但我们可以通过重新启用来解决这个问题),但仍然维护和数据库支持的良好文档在JRuby下中断了,但是更加致命的依赖于守护进程gem会导致"fork不安全并且禁用默认情况下,JRuby"由于JRuby实现中的限制而导致错误.
在github上有一个没有依赖守护进程的分支,但是我不满意从主开发分支切换到一个分支,我仍然留下了ObjectSpace问题,我不确定它的性能影响.
石英的JRuby
虽然之前有过各种石英宝石,但这一最新产品是另一种提供光滑的类似红宝石的界面的尝试.然而,文档很少,我不确定这是否可以支持数据库,我的直觉是它不是.
问题
虽然我在这里只突出了3个选项,但我知道还有其他选项可用.然而,我无法找到解决方案来勾选所有3个需求框(文档,维护,数据库支持).
所以问题是......
有没有其他人处于这种情况并想出一个解决方案?
有没有人设法让delayed_job以任何形式工作?
有没有更好的解决方案,我忽略了并满足了我的需求?
我帮助维护一个Rails网站.它在Solaris Sparc机器上运行JRuby 1.5.5,Rails 2.3.10.我有一个与日志有关的问题.
为了阻止我们的日志文件变得过大并填满磁盘,我们正在使用内置于Logger类的日志转换.在config/environments/production.rb中,我们有:
config.logger = Logger.new(config.log_path, 10, 100.megabyte)
Run Code Online (Sandbox Code Playgroud)
哪个应该在日志文件达到100兆字节时旋转它们,并且只保留10个文件.
问题是双重的:Rails没有正确地旋转日志,并且它保持打开旧的日志文件以写入它 - 但它写的只是一些请求的重复内容.所以,如果我这样做,ls -l log我会看到这样的事情:
-rw-r--r-- 83040892 Oct 4 15:07 production.log
-rw-r--r-- 3303158664 Oct 4 15:07 production.log.0
-rw-r--r-- 104857616 Oct 2 23:13 production.log.1
-rw-r--r-- 104857618 Oct 1 17:12 production.log.2
Run Code Online (Sandbox Code Playgroud)
注意最近循环的日志如何仍然打开并仍然被写入(运行pfiles确认Rails服务器仍然有三个文件句柄到日志).另请注意,它在两天内达到了3千兆字节,通常我们每天可以达到100千兆字节.这是因为它充满了重复的请求.我不能轻易地将它粘贴在这里,但是日志充满了10月3日18:50(相信是日志旋转点)的相同1000行请求,一遍又一遍地打印.根据过去的经验,日志文件将继续填充此重复内容,直到磁盘填满.
日志转移/ Rails日志记录是否明显破坏?(我们的日志文件用法并不奇怪:我们不做任何直接日志记录,它只是来自Rails框架.)明显的下一步是尝试像logrotate,但如果Rails拒绝关闭旧的日志文件和我永远在给他们写垃圾,我怀疑它不会解决我的问题(因为日志永远不会被关闭,因此磁盘空间永远不会恢复).
我正在寻找开发一个绿地web应用程序,它将重用许多Java组件.对我来说,显而易见的选择是Grails或jRuby on Rails,但我很难找到两者的客观比较.有没有明确的理由选择一个关于另一个:
我不是在寻找有关开发人员或社区活动的答案.
(我检查了Grails vs. Rails,它与我无关)
似乎在基于RVM的Rails项目中为JRuby提供标志的惯用方法是设置环境变量JRUBY_OPTS或PROJECT_JRUBY_OPTS,后者可能是自动完成的,因为我看到我可以从项目目录中取消注释这一行.rvmrc:
PROJECT_JRUBY_OPTS=( --1.9 )
Run Code Online (Sandbox Code Playgroud)
但是,该行似乎什么都不做,如果我设置环境变量,RVM实际上取消了它们.
那么,我该怎么做呢?
(请注意,我在.bashrc文件的底部有这个,这是我相信我应该使用rvm :)
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.
Run Code Online (Sandbox Code Playgroud)
$ JRUBY_OPTS=--1.9 jruby -v
jruby 1.6.5 (ruby-1.9.2-p136) (2011-10-25 9dcd388) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_27) [darwin-x86_64-java]
$ export JRUBY_OPTS=--1.9
$ jruby -v
jruby 1.6.5 (ruby-1.8.7-p330) (2011-10-25 9dcd388) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_27) [darwin-x86_64-java]
$ env | grep JRUBY_OPTS
[empty result]
Run Code Online (Sandbox Code Playgroud) 我在Aptana框架上的Jruby编码时遇到问题; 当我运行rails服务器时,它会抛出"编组流中的无效编码",我不知道如何解决?
它在"<%= stylesheet_link_tag%>和<%= javascript_include_tag%>"上引发了错误.在这里我给出了一段代码,请帮助解决此问题:
<title><%=content_for?(:title)?yield(:title) : "MyApp"%></title>
<meta name="description" content="">
<meta name="author" content="">
<%=stylesheet_link_tag "application", :media => "all"%>
<%=javascript_include_tag "application"%>
<%=csrf_meta_tags%>
<%=yield(:head)%>
Run Code Online (Sandbox Code Playgroud) 在我们的JRuby/Rails项目中,我们使用i18ngem,并支持日语和英语.我们的config/locales.ja.yml文件是UTF-8,没有任何BOM.
运行Rails 3.2.9时JRuby 1.7.1,我们现在看到以下错误:
% jruby -S rake spec:models
Psych::SyntaxError: (C:/Projects/foobar/trunk/config/locales/ja.yml):
expected <block end>, but found Scalar while parsing a block
mapping at line 7 column 33
parse at org/jruby/ext/psych/PsychParser.java:213
...
Run Code Online (Sandbox Code Playgroud)
解析ja.yml文件的YAML的这个错误现在在我们的Windows XP和Linux开发环境中发生,并且当我们为JVM显式设置以下系统参数时,似乎只会消失:
-Dfile.encoding=utf-8
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么会这样JRuby 1.7.1?
我没有看到这个1.6.8或1.7.0.
jrubyonrails ×10
jruby ×7
aptana3 ×1
classpath ×1
grails ×1
logging ×1
psychparser ×1
ruby ×1
rvm ×1
scheduling ×1
yaml ×1