Kyl*_*Fox 14 ruby gem rubygems bundler gemfile
我有一个Sinatra应用程序,需要我在本地开发的另一个gem.我在配置Bundler以在开发过程中使用我的本地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
Run Code Online (Sandbox Code Playgroud)
与此同时,我每次部署时都会手动出售gem并更新Gemfile中的gem源,这非常麻烦.我的工作流程如下:
gem 'awesome', :path => "~/code/awesome"
)vendor/gems
gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
)bundle install
(更新Gemfile.lock)太麻烦了!我想做一些更简洁的事情,而不仅仅是编写Rake任务来自动化我当前的设置.
这种情况的最佳工作流程是什么?
小智 13
有一个新功能允许通过简单的specyfing local.gem_name
配置选项,如:
bundle config local.rack ~/path/to/local/rack
Run Code Online (Sandbox Code Playgroud)
这仅在gem具有Gemfile中指定的git repo和branch时才有效.
有关更多详细信息,请参阅thrler文档:http://bundler.io/v1.3/bundle_config.html
小智 4
显然,您可以在 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
Run Code Online (Sandbox Code Playgroud)
也许这会起作用。如果您需要供应正在进行的 gem,也许您可以制作一个小脚本来设置 ENV、供应它并重置 ENV。呃?