2

我正在文件夹中制作宝石:

/Users/me/projects/ruby/gems/mygamename/

它的布局是这样的:

/Users/me/projects/ruby/gems/mygamename/mygamename.gemspec
/Users/me/projects/ruby/gems/mygamename/mygemname.rb
/Users/me/projects/ruby/gems/mygamename/lib/mygemname/file1.rb
/Users/me/projects/ruby/gems/mygamename/lib/mygemname/file2.rb

现在在我的另一个 ruby​​ 项目中,我想在我的 Gemfile 中引用这个 gem,所以我做了:

gem 'mygemname', :path => "/Users/me/projects/ruby/gems/mygamename"

我知道我应该为我的 gem 编写测试来测试功能,但我很好奇我是否也可以从我的其他 ruby​​ 项目(我在我的 Gemfile 中引用它)进行集成测试。

  1. 如果我对 gem 进行更新,是否必须重新运行 bundle?还是它会继续从该文件夹中读取并获取更改?

  2. 关于如何从我的其他 ruby​​ 项目中测试它的任何其他建议?

同样,我将在 gem 本身中编写测试,但想知道如果我愿意,我也可以这样做。

4

3 回答 3

1

bundle install只需要运行一次。Bundler 不会缓存或打包您的 gem,它直接指向您的文件夹。

重启规则与主应用程序相同。如果您对视图、资产或自动加载的 ruby​​ 文件进行更改,它们将自动重新加载。但是,如果您需要应用程序中的一些 lib 文件并更改它们,则必须重新启动您的应用程序。默认情况下,Bundler 将需要 gem "mygemname" 的 "lib/mygemname.rb",因此该文件将无法重新加载。

于 2012-09-24T17:53:20.133 回答
0

我在开发 gem 时通常做的是在一个目录中创建 Gemfile 并从那里工作。在 Gemfile 中,我使用 :path 选项添加对我的 gem 的引用。

gem 'mygemname', :path => '/path/to/my/gem'

然后我运行捆绑安装。这样我就不必继续重新安装我的 gem。

请记住,运行我的 gem 时需要使用 bundle exec。

于 2012-10-01T20:38:35.653 回答
0

Gem 类/模块被缓存,因此每次您对 gemfile 进行更改时,您都必须重新启动您的应用程序。此外,如果您不在 gemspec 中更新 gem 版本,则不必重新捆绑。如果您更新 gem 版本,则可能需要执行bundle update gemname

于 2012-09-24T16:26:49.087 回答