2016-12-28 48 views
0

通常,人们会使用bundle install来安装宝石。但它需要Gemfile和Gemfile.lock(可选)。如何基于Gemfile.lock安装宝石(不含Gemfile)

我的情况有点不同。我只有Gemfile.lock。那么,如何根据bundle命令安装所有这些宝石。我试过bundle install --deployment。但我得到了找不到Gemfile错误。


好的。我在bundler github问题中问了这个问题。他们的成员给了我一个很好的答案:https://github.com/bundler/bundler/issues/5293#issuecomment-269978731

对于总结 - 我不能这样做,

我放弃了跑bundle install只有Gemfile.lock的。但我仍然需要解决我的问题。在我的Gemfile中,我没有任何特殊的选项,比如组,平台,安装条件。所以我写了一个script(gem)来将Gemfile.lock恢复为我的Docker镜像的Gemfile。

[解决]

+0

您是否考虑阅读'gemfile.lock'并反向设计'gemfile'? Bundler被设计为使用gemfiles,我不建议你打它。 – Myst

+0

@Myst我试图反转gemfile.lock - > gemfile或者通过gemfile.lock直接安装bundle。这是因为我现在只有Gemfile.lock。 Gemfile将在另一个回购中需要一些外部Gemfile。所以当我建立我的码头形象。我只有生成的Gemfile.lock。我该怎么办? – agate

+0

可能每次运行脚本时都下载本地副本? – Myst

回答

0

您可以使用捆绑的deployment mode

+0

谢谢!我之前尝试过。但是我找到了'找不到Gemfile'错误。 – agate

0

由于只有gemfile.lock,您可以运行

bundle install --deployment 

,唯一的缺点是,此命令会安装宝石供应商/束,而不是普通的宝石束路径。这是因为它预计只用于生产。

它虽然运作良好。

+0

我在其他线程看到了这个解决方案。但是当我尝试使用它。我得到错误:'无法找到Gemfile' – agate

0

您是否尝试过直接在终端中运行gem install?这样你就不需要使用Gemfile了。

例如,使用设计宝石,您可以在终端中运行$ gem install devise,该设备将安装设计宝石,而不会将其添加到您的Gemfile中。

+0

我知道我可以做到这一点。但我正在试图建立一个码头形象。我希望我可以重新使用我的本地Gemfile.lock。这样我就不必手动添加一堆gem install命令。 – agate