Tag: rubygems

管理冲突版本的ruby gems

我正在构建一个加载用户提供的ruby代码的框架。 它基本上是一个插件机制。 我希望用户提供ruby代码,以便能够获得自己的gem。 我打算让“插件”包中包含一个包含gem的供应商目录。 如何加载插件所需的gem而不会让它们与我的框架的gem发生冲突? 例如,如果我的框架使用treetop版本1.3.0,并且插件使用treetop 1.4.2我希望每个都使用他们指定的版本。 同样,有没有办法防止插件相互冲突? 我看过gem_plugin,_why的沙箱和其他一些工具。 但我没有看到任何专门处理这种情况的库 – 我认为之前已经完成了。 我还看了Bundler的内部,看看它如何管理gem版本。 如果需要,我准备做一些非常复杂的事情。 但我仍然不确定如何去做。 我对如何实现这一点也有很大的自由。 所以,如果你认为我正在咆哮错误的树,请说出来。 谢谢你的建议。 侧面注意:在我写这篇文章时,我发现需要类似于Java servlet容器中的类加载器。 WAR文件可以包含jar文件,Web应用程序的类加载器将优先于全局类路径上的jar。 在ruby中是否有任何方法来分割ruby“classpath”(即load_path,require等)?

是否可以覆盖gemfile进行本地开发?

我们的git存储库中当前有一个Gemfile 。 但是,我在我的环境中只使用本地的gem(我的团队不使用它)。 为了使用它,我必须将它添加到我们的Gemfile ,但每次我检查我们的master / dev主分支时,我必须删除它,因为与跟踪的gemfile冲突。 我想要的是像Gemfile.local这样的东西,它将inheritance从Gemfile导入的gem,但也允许在那里导入新gem以仅在我的机器上使用。 在.gitignore中将忽略此文件。 这有可能吗?

Rails 3 +守护进程gem:查询模型时出现exception

作为我的rails项目的一部分,我们将使用守护进程作为消息队列侦听器来执行来自Rails RESTful Web服务前端的命令。 为了便于原型设计,我们使用Daemons gem创建一个非常简单的守护进程。 现在,它非常简单。 这是代码: require ‘rubygems’ require ‘daemons’ require File.expand_path(‘../../config/environment’, __FILE__) Daemons.run_proc(‘aeon_server’) do loop do empires = Empire.all sleep(5) end end 基本上,它需要守护进程的东西,然后需要我的Ruby环境,然后启动到守护进程。 守护程序只是尝试查询Empires表中的所有内容。 然后它会睡觉并再次进行。 当它执行’all’时,我得到以下exception: C:/Ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_support/buffered_logger.rb:109:in `write’: closed stream (IOError) from C:/Ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_support/buffered_logger.rb:109:in `block in flush’ from :10:in `synchronize’ from C:/Ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_support/buffered_logger.rb:102:in `flush’ from C:/Ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_support/buffered_logger.rb:126:in `auto_flush’ from C:/Ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_support/buffered_logger.rb:67:in `add’ from C:/Ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.7/lib/active_support/buffered_logger.rb:78:in `debug’ from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.7/lib/active_record/connection_adapters/abstract_adapter.rb:206:in […]

如何在ruby中仅在内存中创建zip文件?

我想创建给定目录中所有HTML文件的zip文件。 该zip将通过电子邮件作为附件与目录中的其余文件一起发送。 如果我从小马发送任何附件是HTML文件,我到目前为止尝试的所有电子邮件客户端都无法阅读电子邮件。 所以我以为我会拉链。 有没有办法在运行时压缩 HTML 文件,但实际上只在内存中 ,而不使用Windows平台上的任何临时文件? 最好不要使用任何外部程序? 如果我理解正确,两种方法描述如下: http://info.michael-simons.eu/2008/01/21/using-rubyzip-to-create-zip-files-on-the-fly/或 http://rubyzip.sourceforge.net/classes/Zip/ZipFile.html 正在使用某种临时文件。

可以将“gem install”配置为在/ usr / bin /之外安装可执行文件吗?

默认情况下,当你sudo gem install thegemname它会将可执行文件安装到/usr/bin/ 有没有办法改变这个? 例如,要将它们安装到/usr/local/rubygems/bin (或任何其他路径)? 该路径似乎没有硬编码到gemspec文件中,所以我不明白为什么这不可能(尽管我对Ruby / Gems的经验很少)

具有身份validation的私有Ruby Gem服务器

我想安装一个带有一些身份validation的私有Ruby gem服务器。 我希望能够使用公共Ubuntu服务器托管内部gem。 我读到了http://docs.rubygems.org/read/chapter/18 。 但是没有认证那个 – 我可以看到。 然后我读了一下https://github.com/cwninja/geminabox 。 但是,当我使用基本身份validation(他们在他们的Wiki中)时,它抱怨从我的服务器获取源。 所以。 如何使用身份validation创建私有Ruby gem服务器? 这不可能吗? 谢谢。 编辑: Geminabox问题。 我尝试“捆绑”以安装新的gem……但它给了我这个错误: AGs-MacBook-Pro:super_app AG $捆绑 获取http:// ruby​​gems.org/的源索引 获取http:// localhost:9292 /的源索引 无法访问rubygems存储库http:// ruby​​gems.org/,http:// localhost:9292 / 在任何来源中都找不到aglipsum-0.0.1 而“aglipsum”是我的定制gem。 但是,当我没有基本身份validation时,它可以工作。

通过CentOS 64位在Ruby 1.9.2中安装rubygem’mysql2’时出现编译器错误

带有Ruby 1.8.7和1.9.2的CentOS 64位服务器 {{没有RVM,需要它没有RVM …目前所有Ruby1.9.2二进制文件都是ruby19并且类似地可访问,因此没有gem-path或任何类型的任何映射}}} 安装gem’mysql2’时出错… 我安装了所有依赖项,并且都是64位版本 … 所有错误都属于{./client.h:13:错误:重新定义typedef’rb_unblock_function_t’} 可能{#warning ruby​​sig.h已过时}是理由吗? 控制台捕获: #gem19 install mysql2 -v 0.2.7 — –with-mysql-dir=/usr/bin –with-mysql-config=/usr/bin/mysql_config –with-mysql-include=/usr/include/mysql Building native extensions. This could take a while… ERROR: Error installing mysql2: ERROR: Failed to build gem native extension. /usr/bin/ruby19 extconf.rb –with-mysql-dir=/usr/bin –with-mysql-config=/usr/bin/mysql_config –with-mysql-include=/usr/include/mysql checking for rb_thread_blocking_region()… no checking for mysql.h… yes checking for […]

为什么Gemfile语义版本控制运算符(〜>)会产生一个数字不一致的结果?

gemspec语义版本操作符〜(又名twiddle-wakka ,又名悲观操作符)允许对gem版本进行约束,但允许进行一些升级。 我经常看到它可以被解读为: “~> 3.1” => “Any version 3.x, but at least 3.1” “~> 3.1.1” => “Any version 3.1.x, but at least 3.1.1” 但是有一个数字,这条规则就会破裂: “~> 3” => “Any version x, but at least 3” *NOT TRUE!* “~> 3” => “Any version 3.x” *True. But why?* 如果我想要“任何版本3.x”,我可以使用“〜> 3.0”,这是一致的。 就目前而言,一个数字的这种操作变化是不一致的,没有记录。 此外,如果我想说“任何高于或等于3的版本”(所以3.x,4.x等……)我很想使用“> =”运算符,我们被告知这是邪恶的 。 这种行为有原因吗? 编辑: 我将这个给大卫找到rubygems中的罪魁祸首文件。 有一个“function”无声地将“3”扩展为“3.0”( […]

Ruby Gemspec中的条件依赖

我正在构建一个需要安装json gem的gem,以便它可以工作。 哪个json gem:json_pure,json-jruby或基于C的json无关紧要。 有没有一种在gemspec中定义它的好方法? 这个响应建议为每个版本维护一个完全独立的gem,但似乎必须有一个更好的方法。 有没有人有这方面的经验? 我应该只使用spec.requirements选项向用户发出他/她需要json gem的通知吗?

你能在Gemfile中拥有多个版本的gem吗?

我想要的是这样的: gem ‘rack’, ‘1.3.3’, ‘1.2.4’ 因此,当gem需要不同版本的机架时,它们都是平庸的。 这可能吗?