总是在“ bundle exec”之前“ bundle install”?

时间:2019-05-16 15:49:35

标签: ruby continuous-integration bundler

确保对任何gem的构建都将依赖项安装在构建节点上的最佳实践是什么?

如果某些依赖项尚未安装,

bundle exec将失败。

我应该做

bundle install
bundle exec rake

在每个版本上?

还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

rails附带的bin/setup脚本使用bundle check || bundle install作为前光标步骤。那可能是一个很好的起点。

我在我们的管道上使用bundle install --frozen;冻结可确保不更改Gemfile.lock。我们使用了一个缓存,所以我什至不用担心bundle check步骤。

如果您可以提供有关设置的更多详细信息(码头工人?kubernetes?托管提供程序?),则可能是人为捆绑程序推荐了一种缓存策略,如果这是造成问题的捆绑安装时间。

但是,通常,对于CI管道,即使我们设置了缓存机制,我们也总是在构建的早期运行bundle install --frozen。我注意到在某些情况下,还原表单缓存时可执行文件不会自动链接,因此可以确保一切正常。无论如何,它并不慢。缓存bundle install --frozen步骤仅需一秒钟或2。

答案 1 :(得分:-1)

Bundler通过跟踪和安装所需的确切gem和版本,为Ruby项目提供了一致的环境。 Bundler确保您需要的宝石出现在开发,登台和生产中。

要在具有所有必需的gem的项目上开始工作,请运行: bundle install

bundle execBundler命令,用于在当前包(目录中Gemfile中的那个)的上下文中执行脚本。 例如,要从当前gem set运行迁移命令,请运行:

bundle exec rake db:migrate是脚本,其中db是名称空间,而migration是定义的任务名称。

希望它能提供一些见识。