我有一个Sinatra应用程序需要另一个我在本地开发的gem。我在配置Bundler以便在开发过程中使用我的本地gem代码时遇到了麻烦,但我在生产中使用了我的宝石代码。
理想情况下我可以这样做,但Bundler不允许你指定两次相同的宝石:
# 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
与此同时,我采取了手动销售宝石和放大器的方法。我每次部署时都会更新Gemfile中的gem源,这非常麻烦。我的工作流程如下:
gem 'awesome', :path => "~/code/awesome"
)vendor/gems
gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
)bundle install
(更新Gemfile.lock)真麻烦!我想做一些更简洁的事情,而不仅仅是编写Rake任务来自动化我当前的设置。
这种情况的最佳工作流程是什么?
答案 0 :(得分:13)
有一项新功能可以通过简单地指定local.gem_name
配置选项来实现,例如:
bundle config local.rack ~/path/to/local/rack
仅当gem在Gemfile中指定了git repo和branch时才有效。
有关详细信息,请参阅thr Bundler文档:http://bundler.io/v1.3/bundle_config.html
答案 1 :(得分:3)
显然,您可以在Gemfile中使用常规Ruby。根据{{3}},你可以设置一个环境变量(或我发现的任何其他变量),让你选择你想要使用的宝石版本。
## 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
也许那会奏效。如果您需要提供正在进行中的宝石,也许您可以创建一个小小的脚本,它将设置ENV,供应它,并重置ENV。是吗?
答案 2 :(得分:0)
如果你使用 docker 来构建你的容器,你总是可以在 dockerfile 中将路径设置为环境变量,并在 Gemfile 中使用这个环境变量。请在下面找到 Dockerfile 和 Gemfile 的示例。
Dockerfile
ARG tenant
ENV mgm=3
ENV GEMBOX_URL='abc.com:9292'
WORKDIR /app
COPY Gemfile* ./
RUN bundle install --without development test
COPY . .
ENTRYPOINT ["entrypoint.sh"]
CMD ["crond", "-f"]
宝石文件
source 'https://rubygems.org/'
source ENV['GEMBOX_URL']
gem 'jwt'
gem 'activerecord-import'
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary-edge', '~> 0.12.5.0'
gem 'zgear', '~> 0.6.4.1', source: ENV['GEMBOX_URL']
gem "piston", '~> 1.3.1', source: ENV['GEMBOX_URL']
gem 'communication_connector', '~> 0.1.4', source: ENV['GEMBOX_URL']
gem 'health_check', source: ENV['GEMBOX_URL']
答案 3 :(得分:-3)
这是一个我没有完全工作的建议(用于狂欢主题,我从主题中遇到一些样式表的问题):
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”。