草庐IT

系统扩展

全部标签

Rubyzip 与 native 操作系统压缩

我想知道与使用native操作系统库执行压缩相比,使用ruby​​zip压缩数据时的性能差异是什么。我正在从URL获取要压缩的数据,然后使用ZipOutputStream创建zip文件。对于native操作系统实用程序,我正在考虑使用zip工具。很高兴听到这两种方法的优缺点。 最佳答案 事实证明,无论是运算时间还是CPU使用率,都没有太大差异。但是在内存使用方面存在显着差异。与使用ziputil相比,使用ruby​​zip的过程最终会使用更多的内存。在我们的用例中,内存使用是一个重要问题,因此我们最终使用了zip实用程序。

ruby - 如何从哈希中获取 key - ruby​​ c 扩展

我正在寻找一个可以从散列中获取所有键的函数,或者我可以循环遍历散列以一次检索单个键。目前我正在硬编码keyVALUEoption=rb_hash_aref(options,rb_str_new2("some_key")); 最佳答案 您可以使用rb_hash_foreach的回调函数遍历键/值对(blogpostw/anexample):voidrb_hash_foreach(VALUE,int(*)(ANYARGS),VALUE);有一个rb_hash_keysinMRI,但它似乎不在任何头文件中,因此使用它可能会有风险。

c - Ruby c 扩展 : How can I catch all exceptions, 包括不是 StandardErrors 的东西?

在ruby中,begin#...rescue#...end不会捕获不是StandardError子类的异常。在C中,rb_rescue(x,Qnil,y,Qnil);VALUEx(void){/*...*/returnQnil;}VALUEy(void){/*...*/returnQnil;}会做同样的事情。我如何从ruby​​C扩展中rescueException=>e(而不仅仅是rescue=>e)? 最佳答案 Ruby需要更多文档。我不得不进入ruby​​源代码,这是我发现的:VALUErb_rescue(VALUE(*b_p

c - 如何在 Ruby 1.9 C 扩展中将 Block 转换为 Proc?

我正在编写一个Ruby1.9C扩展,我想在ruby​​中执行以下操作:notifier=Notifier.newnotifier.on'click'doputs"clicked!"end现在的问题是,在C方法上,我只“接收”了一个block,据我所知,它甚至不是一个参数:我只能用rb_yield.所以我的问题是:在Ruby1.9C扩展上有没有办法将block转换为proc或其他东西,这样我就可以将它存储在我的模块中,并在以后需要/需要它们时调用它?就像一个异步回调!我已经用Procs/lambdas实现了这个,但是不直接使用block语法太丑了。 最佳答案

ruby - ||= 条件赋值运算符的官方扩展

我想强调的是,我正在寻找||=运算符被Ruby1.9.3解释器扩展的实际方式,而不是它出现的方式根据其行为进行扩展。我真正希望的是能够理解实际解释器源代码的人,遗憾的是我可能无法胜任这项任务。我发现似乎可以检查此问题的唯一资源已过时:“Ashort-circuit(||=)edgecase”。我上面提到的资源似乎暗示x||=y到x=x||的“官方”扩展y在1.9之前的解释器版本中要么不准确要么有错误。无论如何,指示的边缘情况似乎已被消除。上面的资源声称x||x=y或x或x=y“更准确”。然而,这些都不正确,因为当x是一个以前未声明的全局变量时它们不起作用:[11:04:18][****

ruby - 使用扩展 ActiveSupport::Concern

我正在研究CodeSchool的RubyBits,我做了一个我只是不理解的练习:“确保AtariLibrary类只包含LibraryUtils模块,并让ActiveSupport::Concern负责加载它的依赖项。然后,重构LibraryUtils上的self.included方法以使用包含的方法。”moduleLibraryLoaderextendActiveSupport::ConcernmoduleClassMethodsdefload_game_listendendendmoduleLibraryUtilsdefself.included(base)base.load_gam

ruby - 如何在 OSX 上正确更新系统 ruby​​ 版本到最新版本 (2.2.1)

只是想更新到最新版本的Ruby。在ruby​​-lang.org/en/documentation/installation/#homebrew上,我发现你应该可以通过自制软件来完成:brewinstallruby但是,当我在“更新”后列出ruby​​版本(ruby-v)时,它仍然是旧版本2.0.0。Hermes:~Sancho$ruby-vruby2.0.0p481(2014-05-08revision45883)[universal.x86_64-darwin13]我碰巧列出了/usr/local/bin/的内容,我可以看到一个符号链接(symboliclink):ruby->..

ruby-on-rails - 对于诸如libyaml之类的已编译库,Ruby(或RVM)在文件系统中搜索哪些位置以加载或解析它们?

操作系统:CentOS6.2x86_64很抱歉缩进太古怪了。这是我的第一篇SO帖子,我是新来设置服务器的。不过,我正在学习,并将详细说明我尝试解决此问题所采取的步骤以及寻求帮助的地方。我是一位有抱负的年轻Web开发人员,并且我在其他人配置的服务器上工作,因此,这对我来说是全新的。我正在准备我最近购买的用于运行Rails应用程序的linode。我遵循了此处http://blog.blenderbox.com/2011/01/07/installing-rvm-ruby-rails-passenger-nginx-on-centos/提供的初始安装指南,并更改了步骤:sudobash反射(

c - (U) Ruby 扩展 : rb_gc_mark() and instance variables

我正在编写定义类的ruby​​扩展。如果我使用Data_Wrap_Struct()来实现我对rb_define_alloc_func()的回调,我是否需要手动标记和释放实例变量?还是仍然为我处理? 最佳答案 Ruby的GC将收集在您的Ruby对象的实例变量中引用的所有Ruby对象。您不必也不应该自己释放Ruby实例变量(即在您的扩展中使用rb_iv_set()/rb_iv_get()访问的任何对象)。但是,如果包装的Cstruct引用Ruby对象,那么您必须在传递给Data_Wrap_Struct()的mark回调中标记这些对象。(

ruby-on-rails - 如何从应用程序/模块扩展 ActiveRecord?

我有几个不同的acts_as_...自定义类方法,我想在我的应用程序中使用。我希望这些方法的代码位于app/modules目录中的文件中。我一直无法让它工作。例如,我有一个文件:app/modules/acts_as_lockablemoduleActsAsLockabledefacts_as_lockablebefore_create:set_lockincludeInstanceMethodsendmoduleInstanceMethodsprotecteddefset_locknow=Time.now.to_sself.lock=Digest::SHA1.hexdigest(no