SAP宣布推出Blue Ruby,这是在ABAP虚拟机中运行的Ruby版本.
这似乎为Ruby语言提供了额外的可信度,但除了SAP开发人员之外,它是否对Ruby社区的其他部分有任何适用性?
我只是想知道这可能有什么其他意义.或许,可以聘请Ruby开发人员从事SAP项目的其他工作机会?
Ruby程序员还有其他任何潜在的好处吗?
另外,我还不清楚:除了MRI和JRuby之外,还有多少不同的实现,为什么我作为Ruby程序员需要除MRI以外的任何实现?我知道如果我想与Java库集成,我可能需要JRuby.除了MRI或JRuby之外,还有其他任何时候我可能需要研究一个实现吗?
我注意到Blue Ruby已编译完成.这是一个很大的好处,这将是Ruby的第一个编译版本吗?
对不起 - 可能有太多问题,但这是一个大问题,但我不确定为什么/如果确实如此.非常感谢从比我更了解Ruby(和IT)的人那里获得一些反馈.
我试图在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
我有以下场景:
我需要在一个非常大的集合中找出唯一的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开发一个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会创建一个(可以访问)电子邮件地址.
MyComputerListener的offline当一个节点的连接丢失,被称为:
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) 启动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文件夹中的宝石吗?
我们正在评估开发电信相关应用平台(以及将一些独立应用程序迁移/整合到新平台中)的几种选择.我们主要关注的一个问题是能够在高峰时段处理大量请求.
我们觉得TorqueBox似乎是一个值得考虑的有趣解决方案,因为:
将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一起使用的正确方法是什么?
我想弄清楚为什么我的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.12和rails 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) 我最近刚开始将注意力转移到部署Ruby应用程序上面TorqueBox,当然这些应用程序是在Jruby上面构建的.到目前为止,我基本上已经执行了一次bundle install,然后在前往jrubydom的途中处理每个宝石,但是由于需要重新实现其中的大部分,我已经花了几个宝石花了我相当长的时间来解决.
有没有办法调用bundler或rubygems来运行所有gems及其deps来测试它们是否需要本机c扩展然后返回这样的列表?确定解决一些较小的项目肯定会很好,甚至知道在将项目转移到jruby方面是否值得解决一个项目.
在一个类似的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散列(它只显示为空) - 似乎是一个问题范围.
jruby ×10
ruby ×5
torquebox ×2
activerecord ×1
bundler ×1
compilation ×1
gem ×1
hash ×1
jboss ×1
jdbc ×1
jenkins ×1
json ×1
orientdb ×1
performance ×1
postgresql ×1
rvm ×1
sanitize ×1
sap ×1
sinatra ×1
validation ×1