我正在尝试创建包含C扩展名的 gem 。我使用标准Gem::PackageTask
制作宝石。
当我安装gem时,它会正确构建.so
文件并将其安装在三个位置:
/home/me/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/nmatrix-atlas-0.1.0/nmatrix_atlas.so /home/me/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nmatrix-atlas-0.1.0/lib/nmatrix_atlas.so /home/me/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nmatrix-atlas-0.1.0/ext/nmatrix_atlas/nmatrix_atlas.so
我很好奇为什么要制作三份这样的副本。但无论如何,第一个是当我require 'whatever'
时实际加载的那个。问题是当我对代码进行更改,然后重新打包gem,然后再次运行gem install
,新代码被编译成新的.so而后两个.so被替换为新的,但第一个没有更新。所以ruby仍然看到旧代码。我必须gem uninstall
后跟gem install
才能让它更新。
这是rubygems中的错误吗?或者是预期的行为?或者我做错了什么?
编辑:对于任何好奇的人,我提交了bug on rubygems。暂无回应。