我刚刚发布了ginjo-rfm gem的v2.0.0.当我在雪豹机器(rubygems版本1.3.5)上安装此gem时,我收到以下错误:
admin$ sudo gem install ginjo-rfm --no-rdoc --no-ri
ERROR: Error installing ginjo-rfm:
multi_json requires RubyGems version >= 1.3.6
Run Code Online (Sandbox Code Playgroud)
但是,gem安装并成功运行.
我只有一个运行时依赖项:ActiveSupport> = 2.3.5,这已经安装在我的所有机器上.在我的宝石中没有任何地方我甚至提到multi_json.
更奇怪的是,当我尝试在Ubuntu 8.10(rubygems版本1.3.5)上安装ginjo-rfm时,rubygems会抛出缓冲区溢出错误(见下文).
我的宝石出了什么问题?这是一个相当简单的宝石和gemspec.我已经梳理过,无法找到任何可能导致这类错误的问题.
如果有人愿意看看原始宝石:
mkdir ginjo; cd ginjo
gem fetch ginjo-rfm
tar -xf ginjo-rfm-2.0.0.gem
Run Code Online (Sandbox Code Playgroud)
或者,在"元数据"文件中查看嵌入为yaml的gemspec(参见下文).
谢谢!
缓冲区溢出错误
~$ sudo gem install ginjo-rfm --no-rdoc --no-ri
*** buffer overflow detected ***: /usr/local/bin/ruby terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xf76bf558]
/lib/tls/i686/cmov/libc.so.6[0xf76bd680]
/usr/local/lib/ruby/1.8/i686-linux/syck.so(rb_syck_mktime+0x545)[0xf752cdb5]
/usr/local/lib/ruby/1.8/i686-linux/syck.so(yaml_org_handler+0xabc)[0xf752d8dc]
/usr/local/lib/ruby/1.8/i686-linux/syck.so(syck_defaultresolver_node_import+0x3f)[0xf752d9af]
/usr/local/bin/ruby[0x8060c74]
/usr/local/bin/ruby[0x8060e14]
/usr/local/bin/ruby[0x8061a5a]
/usr/local/bin/ruby(rb_funcall+0x20)[0x8061b90]
/usr/local/lib/ruby/1.8/i686-linux/syck.so(rb_syck_load_handler+0x69)[0xf752b269]
/usr/local/lib/ruby/1.8/i686-linux/syck.so(syck_hdlr_add_node+0x4d)[0xf7525edd]
/usr/local/lib/ruby/1.8/i686-linux/syck.so(syckparse+0xc11)[0xf7526cb1]
/usr/local/lib/ruby/1.8/i686-linux/syck.so(syck_parse+0x32)[0xf7522e12]
/usr/local/lib/ruby/1.8/i686-linux/syck.so(syck_parser_load+0x112)[0xf752dd92]
/usr/local/bin/ruby[0x8056ecd]
/usr/local/bin/ruby[0x8060c74]
/usr/local/bin/ruby[0x8060e14]
/usr/local/bin/ruby[0x805ba84]
/usr/local/bin/ruby[0x805cd31]
/usr/local/bin/ruby[0x8060b79]
/usr/local/bin/ruby[0x8060e14]
/usr/local/bin/ruby[0x805ba84]
/usr/local/bin/ruby[0x805cd31] …Run Code Online (Sandbox Code Playgroud) 你们如何向 gemspec 添加多个开发/运行时依赖项?
这是我这样做的方式:
spec.add_development_dependency 'example1', '~> 1.1', '>= 1.1.4'
spec.add_development_dependency 'example2', '~> 1.1', '>= 1.1.4'
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有其他方法可以做到这一点?
提前致谢!
我遇到了以下错误:
#ERROR
C:\Users\Farooq>D:
D:\>irb
irb(main):001:0> require 'rubygems'
=> false
irb(main):002:0> require 'watir'
LoadError: cannot load such file -- watir/loader
from D:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from D:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from D:/Ruby193/lib/ruby/gems/1.9.1/gems/commonwatir-4.0.0/lib/watir.rb:1:in `<top (required)>'
from D:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
from D:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
from D:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
from (irb):2
from D:/Ruby193/bin/irb:12:in `<main>'
irb(main):003:0>
Run Code Online (Sandbox Code Playgroud)
我已经安装了gem watir,我的系统配置如下:
在我的gem开发目录中,我将文件lib/project/module.rb移动到lib/project/helpers/module.rb然后做了
捆绑安装
这给了我一个无效的gemspec错误
/ path/project中的项目没有有效的gemspec.这可以防止bundler安装bin或native扩展,但这可能不会影响其功能.来自Rubygems的验证消息是:
["lib/project/module.rb"]不是文件
为什么我收到此错误?
I'm building a gem that uses rails-assets-growl gem. This gem can be added to my Gemfile using a different source than 'https://rubygems.org' like this:
source 'https://rails-assets.org' do
gem 'rails-assets-growl'
end
Run Code Online (Sandbox Code Playgroud)
在开发模式下可以正常工作。但是,当我在rubygems.org咆哮中发布我的gem时,它并不包含在依赖关系中。
我认为,这是因为我需要
https://rails-assets.org在gemspec中指定源而不是Gemfile。但是,我不确定。
因此,问题是:
如何在gemspec文件中指定gem的来源?
我对 Ruby 世界不太熟悉。Java 构建工具通常使用jUnit 之类的测试范围。
我用命令初始化了一个新项目:bundle gem new_gem_from_bundler其内容Gemfile是
source "https://rubygems.org"
# Specify your gem's dependencies in new_gem_from_bundler.gemspec
gemspec
gem "rake", "~> 12.0"
gem "rspec", "~> 3.0"
Run Code Online (Sandbox Code Playgroud)
为什么不:
group :development do
gem "rspec", "~> 3.9.0"
gem "rake", "~> 3.0"
end
Run Code Online (Sandbox Code Playgroud)
另外,由于有一个.gemspec文件,我希望rake它的rspec定义如下:
spec.add_development_dependency 'rake', '~> 12.0'
spec.add_development_dependency 'rspec', '~> 3.0'
Run Code Online (Sandbox Code Playgroud)
为什么它们被声明为常规的“gem”依赖项?
通过谷歌梳理后,我知道发生的事情在我的项目gemspec文件,但我没有任何线索,为什么我们需要它,我想我正在寻找一个切实可行的定义。
(当前正在研究Zed Shaw的《艰苦学习Ruby》,这是研究问题之一)
如果我已经构建了一个私有gem(例如在我的公司内部托管),那么我想在我正在构建的另一个gem(不是app!)中重用那个gem,我该怎么做?
我在哪里放置我的依赖项并告诉我的新gem如何找到旧的(已经构建的)私有托管的gem?
我试图将更大的应用程序的一部分作为可安装的引擎。引擎将以不同的形式存在,每一种都包含在自己的宝石中。我无法让 gem 名称与引擎常量名称不同。
提取的部分包含用于注册、身份验证和会话处理的逻辑。该应用程序被世界不同地区的客户使用,对使用该产品的最终客户有不同的要求和规定。这促使我们为每个监管区域的这些需求创建单独的模块。它们当前位于 lib 目录中,并且根据配置加载不同的实现。
引擎的目标是安装适当的引擎,路由文件将所有相关调用路由到引擎。
由于我们有几个这样的注册模块,而且还有更多,我们需要为这些变体维护几个 gem。我正在尝试使 gems 具有不同的名称(auth_A、auth_B 等),但包含的引擎具有相同的内容名称 Auth::Engine。
这样我们就可以在 Gemfile 中包含正确的 gem,其余的就可以正常工作,因为无论运行什么版本,它应该路由到的端点总是相同的。
我遇到的问题是我无法让 gem 具有一个名称而引擎具有另一个名称...
如果我生成一个新的引擎名称 auth,则可以将其安装在主应用程序中。如果我然后将 gem 名称和包含文件夹更改为 auth_a 并更新主机应用程序 Gemfile 它停止工作,我可以很好地捆绑,但是当我尝试启动主机应用程序时,它在连接到安装引擎时失败,抱怨 Auth::引擎是一个未定义的常量。
我的,稍微编辑了一下,gemspec 看起来像这样:
$:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's version:
require "auth/version"
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
s.name = "auth_a"
s.version = Auth::VERSION
s.authors = ["Jonas Schubert Erlandsson"]
s.email = ["jonas.schubert.erlandsson@xxxxxx.com"]
s.homepage = "http://some.page.on/the/internet.html"
s.summary = "Authentication module for A"
s.description = …Run Code Online (Sandbox Code Playgroud) 在过去的几个月里,Ruby依赖管理和创建宝石的状态出现了许多快速发展,我一直无法跟上所有事情.
如果我正在写一个新的宝石,那么我用来创建我的最佳工具是什么gemspec?使用此工具比竞争对手有缺点吗?
我已经在应用程序上使用了Bundler几次,对我而言,它是一个救星.是否适合与生产应用程序一起使用?是否有人应该注意的怪癖或特质?
您已经使用并且发现有用的资源的链接也将非常感激.
我正在开发一个gem,我的Gemfile看起来像这样:
source :rubygems
gemspec
group :development, :test do
gem "pry"
gem "debugger"
gem "rake"
end
Run Code Online (Sandbox Code Playgroud)
但是,我不希望人们必须安装pry和debugger运行测试,但我也希望能够在我的测试中要求它们(因为我正在运行带有前缀的测试bundle exec,我无法在我的加载路径中获取它们如果他们不在Gemfile中).我该如何实现这一目标?
另外,何时将用于开发的宝石放在gemspec中,何时将它们放入Gemfile中?我真的不知道区别.