确保对任何gem的构建都将依赖项安装在构建节点上的最佳实践是什么?
如果某些依赖项尚未安装, bundle exec
将失败。
我应该做
bundle install
bundle exec rake
在每个版本上?
还是有更好的方法?
答案 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 exec
是Bundler
命令,用于在当前包(目录中Gemfile中的那个)的上下文中执行脚本。
例如,要从当前gem set运行迁移命令,请运行:
bundle exec rake db:migrate
是脚本,其中db是名称空间,而migration是定义的任务名称。
希望它能提供一些见识。