如何在gem开发过程中将ruby应用程序指向机器上的本地gem,而无需在每次更改时重建并重新安装gem

问题描述 投票:0回答:1

我正在构建一个(非rails)ruby gem,在开发过程中我创建了一个使用该gem的小型ruby项目,这样我就可以在构建它时对其进行测试。

在我的 ruby 应用程序中,Gemfile 指向 gem,如下所示:

gem 'my_gem', path: '/path/to/my/gem/directory'

每次我在 gem 中更改一行代码时,我都想通过运行我的应用程序来测试它。但是,我的更改没有加载。我可以加载更改的唯一方法是执行以下操作:

gem uninstall my_gem
gem build my_gem.gemspec
gem install my_gem-0.1.0.gem

这需要很长时间,每次我更改一行代码,运行这 3 个命令大约需要一分钟,因此我可以在运行使用 gem 的应用程序时看到我的更改。

根据我的研究,似乎有些人很幸运,将他们的 gem 推送到 github,用

github: my_account/my_gem
在他们的 Gemfile 中引用他们的 gem,然后设置
bundle config local.my_gem /path/to/my/gem/directory
。不过我还不想让我的 gem 出现在 github 上,这还远未完成。无论如何,我尝试使用此设置,但它对我不起作用,我的宝石的更改没有被我的应用程序加载。

必须有一种方法可以让应用程序在本地简单地引用 gem 的 ruby 代码(就像 require 一样),每次运行应用程序时都会加载它,而无需每次都卸载、重建和重新安装。我不明白有人会在无法做到这一点的情况下开发大型/复杂的红宝石。或者必须有一种方法可以自动加载对 gem 的更改等。

谢谢

ruby rubygems bundler local autoload
1个回答
0
投票

path
应该指向你正在工作的gem目录,而不是
gem install
之后结束的目录:

# you don't need to build or install it, just point to your working directory
gem "my_gem", path: "../my_gem"

# definitely not like this, besides, `path` is unnecessary if gem is installed
# gem "my_gem", path: "/home/alex/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/my_gem-0.1.0"
© www.soinside.com 2019 - 2024. All rights reserved.