标签: jruby

对Ruby的新实现Ruby的Ruby程序员有何意义?

SAP宣布推出Blue Ruby,这是在ABAP虚拟机中运行的Ruby版本.

这似乎为Ruby语言提供了额外的可信度,但除了SAP开发人员之外,它是否对Ruby社区的其他部分有任何适用性?

我只是想知道这可能有什么其他意义.或许,可以聘请Ruby开发人员从事SAP项目的其他工作机会?

Ruby程序员还有其他任何潜在的好处吗?

另外,我还不清楚:除了MRI和JRuby之外,还有多少不同的实现,为什么我作为Ruby程序员需要除MRI以外的任何实现?我知道如果我想与Java库集成,我可能需要JRuby.除了MRI或JRuby之外,还有其他任何时候我可能需要研究一个实现吗?

我注意到Blue Ruby已编译完成.这是一个很大的好处,这将是Ruby的第一个编译版本吗?

对不起 - 可能有太多问题,但这是一个大问题,但我不确定为什么/如果确实如此.非常感谢从比我更了解Ruby(和IT)的人那里获得一些反馈.

ruby sap implementation compilation jruby

8
推荐指数
1
解决办法
1095
查看次数

对于此解释器错误rvm,JRuby无法切换到1.6.2

我试图在Ubuntu Linux上使用RVM配置JRuby.我已成功安装RVM,但在尝试安装Jruby时,出现以下错误:

dlitwak@ubuntu:~$ rvm install jruby-1.6.0
jruby-1.6.0 - #fetching 
jruby-1.6.0 - #extracted to /home/dlitwak/.rvm/src/jruby-1.6.0 (already extracted)
Building Nailgun
jruby-1.6.0 - #installing to /home/dlitwak/.rvm/rubies/jruby-1.6.0
**ERROR: Cannot switch to 1.6.2 for this interpreter.**
jruby-1.6.0 - #importing default gemsets (/home/dlitwak/.rvm/gemsets/)
Copying across included gems
Building native extensions.  This could take a while...
Successfully installed jruby-launcher-1.0.7-java
1 gem installed

ruby jruby rvm

8
推荐指数
1
解决办法
974
查看次数

红宝石中的大数组操作非常慢

我有以下场景:

我需要在一个非常大的集合中找出唯一的id列表.

例如,我有6000个ID数组(关注者列表),每个数据的大小范围在1到25000之间(他们的关注者列表).

我希望在所有这些ID数组中找到唯一的id列表(追随者的独特关注者).一旦完成,我需要减去另外一个列表(另一个人跟随者列表)的ID并获得最终计数.

最后一组独特的ID增长到大约60,000,000条记录.在ruby中将数组添加到大数组时,它开始变得非常慢,只有几百万.添加到设置首先需要0.1秒,然后增加到超过4秒,达到200万(没有我需要去的地方).

我在java中编写了一个测试程序,它在不到一分钟的时间内完成了整个过程.

也许我在红宝石中效率低下,或者有另一种方式.由于我的主要代码是专有的,我编写了一个简单的测试程序来模拟问题:

big_array = []
loop_counter = 0
start_time = Time.now
# final target size of the big array
while big_array.length < 60000000
 loop_counter+=1
 # target size of one persons follower list
 random_size_of_followers = rand(5000)
 follower_list = []
 follower_counter = 0
   while follower_counter < random_size_of_followers
     follower_counter+=1
     # make ids very large so we get good spread and only some amt of dupes
     follower_id = rand(240000000) + 100000
     follower_list << follower_id
   end
 # combine the big …
Run Code Online (Sandbox Code Playgroud)

ruby performance jruby

8
推荐指数
1
解决办法
6584
查看次数

使用Ruby验证Jenkins插件表单

我正在使用Ruby开发一个Jenkins插件.您应该能够配置连接到服务器的每个节点,以便在节点失去与主服务器的连接时将电子邮件发送到指定的地址.EmailNodeProperty添加一个字段以输入电子邮件地址:

# 
# Save an email property for every node
#
class EmailNodeProperty < Jenkins::Slaves::NodeProperty
    require 'java'
    import 'hudson.util.FormValidation'  

    display_name "Email notification"

    attr_accessor :email

    def initialize(attrs = {})
        @email = attrs['email']
    end

    def doCheckEmail value
        puts "  ENP.doCheckEmail:#{value}"
    end
end
Run Code Online (Sandbox Code Playgroud)

配置节点时,会有一个名称email,您可以在其中输入电子邮件地址.我希望在您输入地址时验证此字段.

保存配置时,EmailNodeProperty会创建一个(可以访问)电子邮件地址.

MyComputerListeneroffline当一个节点的连接丢失,被称为:

class MyComputerListener
    include Jenkins::Slaves::ComputerListener
    include Jenkins::Plugin::Proxy

    def online(computer, listener)
    end

    def offline(computer)
        #Do nothing when the Master shuts down
        if computer.to_s.match('Master') == nil
            list = computer.native.getNode().getNodeProperties()
            proxy = …
Run Code Online (Sandbox Code Playgroud)

ruby validation jruby jenkins jenkins-plugins

8
推荐指数
1
解决办法
436
查看次数

output_safety.rb:34警告:regexp匹配/.../n反对UTF-8字符串

启动WEBrick服务器时,在调用主页时会收到下一条警告:

c:/Program Files/jruby-1.6.7/lib/ruby/gems/1.8/gems/activesupport-
  3.2.2.rc1/lib/active_support/core_ext/string/output_safety.rb:34 
  warning: regexp match /.../n against to UTF-8 string
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么我会收到这个警告吗?

+

我在1.9模式下运行JRuby,但在这里我从1.8文件夹中的gem获得了一个错误.这是为什么?不应该使用1.9文件夹中的宝石吗?

ruby-on-rails jruby

8
推荐指数
1
解决办法
2926
查看次数

JRuby/TorqueBox用于高性能/关键任务应用程序

我们正在评估开发电信相关应用平台(以及将一些独立应用程序迁移/整合到新平台中)的几种选择.我们主要关注的一个问题是能够在高峰时段处理大量请求.

我们觉得TorqueBox似乎是一个值得考虑的有趣解决方案,因为:

  • 速度(纯Java性能旁边)
  • 比Java更快的开发时间
  • 可维护性
  • 支持线程/并发,即使它是Ruby
  • 使用Rails实现更快/更轻松的前端开发
  • ...
  • RedHat支持并运行在JBoss上(可扩展性,未来开发以及必要时调用Java的能力)
  1. 是否有人使用JRuby/TorqueBox开发/部署了类似的应用程序?
  2. 未来任何严重的性能瓶颈?(或者为什么我们不应该使用JRuby并且应该坚持使用Java?)

jboss jruby mission-critical torquebox

8
推荐指数
1
解决办法
384
查看次数

将OrientDB的JDBC驱动程序与ActiveRecord一起使用

将OrientDB的JDBC驱动程序与ActiveRecord一起使用的正确方法是什么?

我正在尝试将Rails 3.2应用程序连接到OrientDB 1.4.我安装了gem activerecord-jdbc-adapter,并配置database.yml如下:

development:
  adapter: jdbc
  username: admin
  password: admin
  driver:   com.orientechnologies.orient.jdbc.OrientJdbcDriver
  url:      jdbc:orient:local:db/test_db2
Run Code Online (Sandbox Code Playgroud)

我按如下方式加载OrientDB的JDBC驱动程序:

# in config/application.rb:
require '/home/myuser/jars/orientdb-jdbc-1.4.0-all.jar'
Run Code Online (Sandbox Code Playgroud)

应用程序启动(使用rails s)时抛出以下异常:

java.lang.NullPointerException
    at arjdbc.jdbc.RubyJdbcConnection.unmarshalResult(RubyJdbcConnection.java:1187)
    at arjdbc.jdbc.RubyJdbcConnection.set_native_database_types(RubyJdbcConnection.java:537)
    at arjdbc.jdbc.RubyJdbcConnection$INVOKER$i$0$0$set_native_database_types.call(RubyJdbcConnection$INVOKER$i$0$0$set_native_database_types.gen)
    ...
Run Code Online (Sandbox Code Playgroud)

我的配置中是否缺少某些内容?将OrientDB的JDBC驱动程序与ActiveRecord一起使用的正确方法是什么?

activerecord ruby-on-rails jruby jdbc orientdb

8
推荐指数
1
解决办法
858
查看次数

在pgAdmin中Rails查询速度很慢但速度很快

我想弄清楚为什么我的rails应用程序中的一个查询表现相当不错.我正在使用Postgres 9.3,并使用jRuby 1.7.10使用rails 4.0.3,这可能是JDBC驱动程序的一个问题?

但基本上,这是一个非常简单的查询:

SELECT * FROM table;
Run Code Online (Sandbox Code Playgroud)

该表包含851行,因此它几乎不是一个庞大的数据集,所以我期待快速查询.当我在pgAdmin 3中执行此查询时,我得到了我期望的结果:所有行返回15到35ms之间的任何位置.好快又快!

从轨道来看,这是一个不同的故事.在rails控制台中运行查询,我能够实现的最快速度189ms虽然一般都在200ms标记之内.此查询通过调用运行Table.all

我最初的想法只是ActiveRecord在851对象的实例化中增加了开销,所以这显然会减慢它的速度.为了测试这个,我跑了

ActiveRecord::Base.connection.execute("SELECT * FROM table")
Run Code Online (Sandbox Code Playgroud)

有一点点加速,但是,几乎所有的查询都在进行150ms,距离pgAdmin标记还有很长的路要走.作为我尝试的最后一次尝试

ActiveRecord::Base.connection.exec_query_raw("SELECT * FROM table")
Run Code Online (Sandbox Code Playgroud)

但这根本没有改善性能.

考虑到我看到pgAdmin和Rails之间的性能下降了10倍,我现在真的很难过为什么这么慢.在Rails中只执行了原始SQL,我知道ActiveRecord不会减慢速度,所以我现在真的很困惑.

有谁知道为什么这比它应该慢得多?

UPDATE

我已经做了一些挖掘,似乎是rails处理Date字段的方式.如果我手动选择表中的所有列,它同样慢,但如果我选择除了updated_at和之外的所有列created_at,查询运行大约2-4ms,这是完美的!

我现在唯一的问题是如何解决这个问题.有没有办法修复日期的rails性能问题,或者有轨道没有将它们解析为日期并将它们保存为字符串或类似的?

更新2

这样做后,一些挖掘和@stonehz指着我从这个职位上调的错误,我已经升级到了Jruby 1.7.12rails 4.1.0,发现有相当加快.它与pgAdmin的性能并没有太大关系,但我认为如果不完全删除日期列,我就不会得到更好的结果.以下是我现在得到的基准

SELECT *:                        4.080000   0.330000   4.410000 (  5.243000)
SELECT date_fields:              1.960000   0.020000   1.980000 (  2.032000)
SELECT * - date_fields:          3.070000   0.070000   3.140000 (  3.247000)
--------------------------------------------------------- total: 9.530000sec

                                     user     system      total        real
SELECT …
Run Code Online (Sandbox Code Playgroud)

postgresql jruby ruby-on-rails-4

8
推荐指数
1
解决办法
1585
查看次数

找出Gemfile中哪些gems需要本机c扩展?

我最近刚开始将注意力转移到部署Ruby应用程序上面TorqueBox,当然这些应用程序是在Jruby上面构建的.到目前为止,我基本上已经执行了一次bundle install,然后在前往jrubydom的途中处理每个宝石,但是由于需要重新实现其中的大部分,我已经花了几个宝石花了我相当长的时间来解决.

有没有办法调用bundler或rubygems来运行所有gems及其deps来测试它们是否需要本机c扩展然后返回这样的列表?确定解决一些较小的项目肯定会很好,甚至知道在将项目转移到jruby方面是否值得解决一个项目.

ruby gem jruby bundler torquebox

8
推荐指数
2
解决办法
730
查看次数

我如何消毒进入Sinatra应用程序的所有参数?

在一个类似的Rails应用程序中,我能够创建一个递归的哈希检查函数,然后运行Sanitize gem的clean/fragment方法从传入的params哈希中删除任何HTML元素.我在application_controller中使用了一个前置过滤器,所以一切都在应用程序范围内被清除(这是一个很棒的应用程序).

背景故事:XSS攻击是可能的,特别是在IE浏览器中,但实际上我们不希望任何这些东西被保存到数据库中.虽然最终目标是JSON输出不包含它.

我试图在Sinatra应用程序(它有一些ActiveSupport和JRuby ActiveRecord捆绑在一起)中做同样的事情,但是Sanitize gem不会捆绑,因为这个特定的应用程序在JRuby中运行由于某些数据库原因.Sanitize需要Nokogiri,而Nokogiri又需要Nokogumbo,后者不会在这个JRuby环境中构建.

因此我尝试使用Rack :: Util内置的html转义方法在app.rb中进行前置过滤,但这会炸毁应用程序.

有没有其他方法可以考虑

1)将所有传入的参数消毒到(JRuby)Sinatra应用程序中

如果没有,一个较小的选择:

2)使所有被解析的JSON清理所述JSON属性值列表中的值?

PS - 这里的部分问题是,一个包含的本地gem,它处理了许多params并进行JSON渲染,证明无法调试.我将在主机应用程序和本地链接的宝石中包含Pry,当我尝试撬入宝石时,我无法查看params散列(它只显示为空) - 似乎是一个问题范围.

hash json jruby sanitize sinatra

8
推荐指数
1
解决办法
1254
查看次数