我正在文件夹中制作一个宝石:
/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中引用它)中进行集成测试。
如果我对gem进行更新,是否必须重新运行bundle?或者它是否继续从该文件夹中读取并且它将获取更改?
关于如何从我的其他ruby项目中测试它的任何其他建议?
我将再次在gem中编写测试,但想知道如何以这种方式做我也想做的事情。
答案 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。