在开发gem时,在进行更新后是否必须继续安装?

时间:2012-09-24 02:18:07

标签: ruby gem

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

/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编写测试以测试functionaly,但我很好奇我是否也可以从我的其他ruby项目(我在我的Gemfile中引用它)中进行集成测试。

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

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

  3. 我将再次在gem中编写测试,但想知道如何以这种方式做我也想做的事情。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

然后我运行bundle install。这样我就不必继续重新安装我的宝石了。

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