Bundler如何确定重新安装某些东西?

时间:2018-04-20 16:31:39

标签: ruby rubygems bundler

我使用CI工具(特定的CircleCI)来缓存一些Ruby宝石,所以我不必在每次构建时重新安装它们。目前在第一次构建时,我这样做:

gem install bundler
bundle install

安装了许多宝石:

Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Using public_suffix 3.0.2
Using addressable 2.5.2
Using bundler 1.16.1
Using mini_mime 1.0.0
Using mini_portile2 2.3.0
Fetching nokogiri 1.8.2
Installing nokogiri 1.8.2 with native extensions

完成初始构建后,我将缓存捆绑程序显示宝石所在位置的目录:/opt/circleci/.rvm/gems/ruby-2.3.1/gems/及其内容。

下次运行时,我可以cd /opt/circleci/.rvm/gems/ruby-2.3.1/gems/显示已恢复的缓存中的所有宝石。但是,如果我导航到我的Gemfile并运行bundle info nokogiri或该文件夹中的任何其他宝石,则会显示错误:Could not find public_suffix-3.0.2 in any of the sources

如果我运行bundle installgem install gemnamehere gems再次安装 ,这是不理想的,因为目标是节省构建时间。我是否需要使用bundle或Ruby运行某种命令才能让它知道这些宝石是否已经安装,所以它不会再这样做了?

如果这是一个愚蠢的问题,请道歉,我随着时间的推移学习这个。

根据要求编辑:CircleCI配置:

  test:
    machine: true
    steps:  
      - run:
          # Installs PhantomJS
          name: Install phantomjs
          command: |
            if ! [ $(which phantomjs) ]; then                
              curl --output /usr/local/bin/phantomjs https://s3.amazonaws.com/circle-downloads/phantomjs-2.1.1
            fi
      - checkout
      - restore_cache:
          keys:
            - v1-gem-cache-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
      - run:
          name: "Install Dependencies"
          command: |
            cd ~/project
            gem install bundler
            bundle install
      - save_cache:
          key: v1-gem-cache-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
          paths:
            - /opt/circleci/.rvm/gems/ruby-2.3.1/gems/
      - run:
          name: "Run  Snapshots"
          command: |
            cd ~/project
            yarn build
            cd ~/project/mocks/visual
            bundle exec ruby snapshots.rb

2 个答案:

答案 0 :(得分:2)

解决方案是使用bundle install --path vendor/cache并缓存vendor/cache路径。

答案 1 :(得分:0)

如果您尝试更改此部分该怎么办?

- save_cache:
      key: v1-tc-gem-cache-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
      paths:
        - vendor/bundle
  - persist_to_workspace:
      root: ~/project
      paths: vendor/bundle