在Python中,我可以使用pip install -e
在"editable" mode中安装源代码包。然后我可以继续编辑代码,任何更改都将由import library
是否有类似的工作流程来开发Ruby宝石?什么是" Ruby方式"在开发时使用libs而不是每次我对源进行更改时编译和安装gem?
答案 0 :(得分:9)
bundler
可能会使用两种常用方法:
bundle install --path vendor/bundle
而不会运行bundle update
,除非所有内容都经过测试。Gemfile
中mymaingem.gemspec
不支持此项):gem 'mycutegem', :git => 'git://github.com/myname/mycutegem', :branch => 'master'
; bundle config local.mycutegem /path_to_local_git/mycutegem
。第一种方法是将所有内容下载到当前项目的子文件夹中(这里它是vendor/bundle
。)随意修改那里的所有内容,它将被反映出来。
第二种方法可能更好。您将从github克隆gem并指示bundle
使用相应git存储库的本地克隆。此方法使您能够将对主gem的更改发布到存储库中。一旦发布了依赖回购,最新版本将由您的宝石订阅者检索,假设他们没有指示他们的bundler
使用他们的当地人。
希望这有帮助。
答案 1 :(得分:5)
假设您的宝石代码位于文件夹中(例如my_project/mygem/lib
)。您可以使用my_project
代码在mygem
中添加一些Ruby代码。
我要做的是将mygem/lib
添加到所述文件开头的$LOAD_PATH
全局变量中。有点像这样:
$LOAD_PATH << File.expand_path('lib', './mygem') # Resolve global paths
require 'a_file' # Would require "mygem/lib/a_file.rb"
答案 2 :(得分:2)
我不确定这是否正是您想要实现的目标,但是从描述中我推断出您希望拥有某个gem的本地副本并在项目中引用该gem。 如果是这种情况,您可以(通常)分两步完成:
git clone url-of-the-gem-repo
gem "some-gem", :path => "/path/to/local/copy"
如果gem存储在github中,更好的方法是先在github上分叉,然后克隆自己的副本。然后,如果您对本地仓库中的代码进行任何改进,您可以使用拉取请求轻松地与全世界共享。
答案 3 :(得分:0)
我意识到这是一个5岁的问题,但是我发现所有这些答案都不令人满意。由于我使用ruby开发CLI工具,因此使用捆绑程序进行测试不是理想的选择。我需要能够在任何地方执行我的测试命令,并获得与pip install --editable
实际相等的值。
这是我的解决方法。
使用RVM设置新的宝石集进行开发
rvm gemset use tools-dev --create
安装宝石
gem install mygem.gem
找到安装目录
gem list tool -d
在输出中将显示installed at ${rvm_gemset_path}
。复制该路径。它还将是一个环境变量GEM_HOME
,但是为了完整和清楚起见,我将这一步包括在内。
删除已安装的副本
rm -Rf ${rvm_gemset_path}/gems/mygem-${version}
创建一个指向git仓库工作目录的符号链接。
ln -s ${PWD} ${rvm_gemset_path}/gems/mygem-${version}
假设您位于git目录中,并且已将GEM_NAME
设置为gem的名称,则此bash脚本将以更自动化的方式进行操作。
rvm gemset use --create ${GEM_NAME}-dev
gem build ${GEM_NAME}.gemspec
gem install ${GEM_NAME}*.gem
gem_install_path=$(ruby -e "puts Gem::Specification.find_by_name('${GEM_NAME}').full_gem_path")
mv ${gem_install_path} ${gem_install_path}.bak
ln -s ${PWD} ${gem_install_path}