Bundler / Gemfile如何配置为在开发期间使用不同的gem源?
我有一个Sinatra应用程序需要另一个我在本地开发的gem。 我在配置Bundler以在开发过程中使用我的本地gem代码时遇到了麻烦,但我在生产中使用了我的gem代码。
理想情况下我可以这样做,但Bundler不允许你指定两次相同的gem:
# Doesn't work: group :development do gem 'awesome', :path => "~/code/awesome" end group :production do gem 'awesome', :path => "vendor/gems/awesome-0.0.1" end
与此同时,我每次部署时都会手动出售gem并更新Gemfile中的gem源,这非常麻烦。 我的工作流程如下:
- 在开发过程中指向我的本地gem(
gem 'awesome', :path => "~/code/awesome"
) - 准备好部署时,将gem解压缩到
vendor/gems
- 更新Gemfile以指向vendored gem(gem’awesome
gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
) - 运行
bundle install
(更新Gemfile.lock) - 部署代码
- 返回第1步。
太麻烦了! 我想做一些更简洁的事情,而不仅仅是编写Rake任务来自动化我当前的设置。
这种情况的最佳工作流程是什么?
有一个新function允许通过简单地指定local.gem_name
配置选项来执行此操作,如:
bundle config local.rack ~/path/to/local/rack
这仅在gem具有Gemfile中指定的git repo和branch时才有效。
有关更多详细信息,请参阅thrler文档: http : //bundler.io/v1.3/bundle_config.html
显然,您可以在Gemfile中使用常规Ruby。 根据这篇文章,你可以设置一个环境变量(或我发现的任何其他变量),让你选择你想要使用的gem版本。
## based on an ENV variable if ENV['RACK_ENV'] == "development" gem 'awesome', :path => "~/code/awesome" else gem 'awesome', :path => "vendor/gems/awesome-0.0.1" end
也许那会奏效。 如果你需要提供你正在进行的gem,也许你可以制作一个小小的脚本,它将设置ENV,供应它,并重置ENV。 嗯?
这是一个我没有完全工作的建议(用于狂欢主题,我从主题的一些样式表遇到问题):
group :production do gem 'gemname', '~> 0.1.6', :git => 'git://github.com/foouser/gemname.git' end group :development do gem 'gemnamedev', :path => '~/path/gemname' # use local version end
复制gemname.gemspec文件并将其命名为gemnamedev.gemspec,并将其中的s.name更改为“gemnamedev”。
- “PHP Composer”与“Ruby Gems and Bundler”相比
- Bundler如何在Gemfile中单独在一个文件中单独要求gems?
- Travis报告了Gemfile.lock损坏的奇怪消息
- 每当Gem无法在Capistrano中正确运行“捆绑执行”
- Bundler似乎无法通过Rbenv找到正确的Ruby
- Capistrano是否需要在Gemfile的开发组中?
- 如何在Heroku上使用rdiscount?
- 从rvm切换到rbenv,现在无法使用rails s。 无法激活bundler-1.12.5,已经激活了bundler-1.13.0.rc.1(Gem :: LoadError)
- 使用RVM时,如果gem安装在不同的ruby版本中,则bundler不会安装在正确的gemset中