Rails 4: заставить Webpacker работать с CircleCI

Я пытаюсь интегрировать Webpacker в приложение Rails 4, над которым я работаю. Я добавил гем в Gemfile и запустил директивы, чтобы настроить все для использования Webpacker и Vue.js. Ресурсы компилируются в процессе разработки, но когда я загружаю их в наш конвейер CI, я вижу, что CircleCI возвращает следующую ошибку:

ActionView::Template::Error:         ActionView::Template::Error: Webpacker can't find application in /home/circleci/app/public/packs-test/manifest.json. Possible causes:
  1. You want to set webpacker.yml value of compile to true for your environment
  unless you are using the `webpack -w` or the webpack-dev-server.
  2. webpack has not yet re-run to reflect updates.
  3. You have misconfigured Webpacker's config/webpacker.yml file.
  4. Your webpack configuration is not creating a manifest.
  Your manifest contains:
  {
  }

не уверен, какую из этих ошибок мне нужно решить.

Мой файл config/webpacker.yml просто использует настройки по умолчанию и выглядит так:

# Note: You must restart bin/webpack-dev-server for changes to take effect

default: &default
  source_path: app/javascript
  source_entry_path: packs
  public_root_path: public
  public_output_path: packs
  cache_path: tmp/cache/webpacker
  check_yarn_integrity: false
  webpack_compile_output: false

  # Additional paths webpack should lookup modules
  # ['app/assets', 'engine/foo/app/assets']
  resolved_paths: []

  # Reload manifest.json on all requests so we reload latest compiled packs
  cache_manifest: false

  # Extract and emit a css file
  extract_css: false

  static_assets_extensions:
    - .jpg
    - .jpeg
    - .png
    - .gif
    - .tiff
    - .ico
    - .svg
    - .eot
    - .otf
    - .ttf
    - .woff
    - .woff2

  extensions:
    - .mjs
    - .js
    - .sass
    - .scss
    - .css
    - .module.sass
    - .module.scss
    - .module.css
    - .png
    - .svg
    - .gif
    - .jpeg
    - .jpg

development:
  <<: *default
  compile: true

  # Verifies that versions and hashed value of the package contents in the project's package.json
  check_yarn_integrity: true

  # Reference: https://webpack.js.org/configuration/dev-server/
  dev_server:
    https: false
    host: localhost
    port: 3035
    public: localhost:3035
    hmr: false
    # Inline should be set to true if using HMR
    inline: true
    overlay: true
    compress: true
    disable_host_check: true
    use_local_ip: false
    quiet: false
    headers:
      'Access-Control-Allow-Origin': '*'
    watch_options:
      ignored: '**/node_modules/**'


test:
  <<: *default
  compile: true

  # Compile test packs to a separate directory
  public_output_path: packs-test

production:
  <<: *default

  # Production depends on precompilation of packs prior to booting for performance.
  compile: false

  # Extract and emit a css file
  extract_css: true

  # Cache manifest.json for performance
  cache_manifest: true

мне нужно исправить мой файл манифеста? Если да, то как?

Заранее спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
1 736
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Убедитесь, что у вас есть NODE_ENV и RAILS_ENV в конфигурации вашего круга. Также запустите команды установки bundle exec rails webpacker:install, если вы еще не запустили ее.

Я бегал bundle exec rails webpacker:install локально перед пушем. Он также должен каждый раз запускаться на CircleCI?

DaniG2k 10.06.2019 18:03

Все ли файлы генерируются этим, и если вы используете что-то вроде реакции, то правильно добавляется bundle exec rails webpacker:install:react?. Если вы запустите RAILS_ENV=test bundle exec rails webpacker:install локально, правильно ли генерируются файлы пакета для /public/packs_test?

Haseeb A 10.06.2019 19:51
Ответ принят как подходящий

Решается добавлением следующего к .circleci/config.yml:

Образ докера:

image: circleci/ruby:<<ruby_version>>-node-browsers

(это нужно для того, чтобы у нас был образ Docker с предустановленным Node.js)

Переменные среды:

NODE_ENV: test

Это необходимо для того, чтобы шаг webpacker:compile выполнялся в тестовой среде.

И следующий шаг:

yarn_install:
  steps:
    - restore_cache:
        keys:
          - yarn-cache-v1-{{ checksum "yarn.lock" }}
          - yarn-cache-v1-
    - run: yarn install --cache-folder ~/.cache/yarn
    - run: bundle exec rake webpacker:compile
    - save_cache:
        key: yarn-cache-v1-{{ checksum "yarn.lock" }}
        paths:
          - ~/.cache/yarn

Кажется, это сделало свое дело!

Недавно я столкнулся с этой проблемой и попробовал принятое решение, но оно не сработало для меня. Я получил ту же ошибку, что и OP, когда запускал свои спецификации на CircleCI.

Мое решение состояло в том, чтобы включить yarn install и rails webpacker:compile в мой существующий шаг bundle следующим образом:

      - run: yarn install
      - run: bin/rails webpacker:compile

Затем я добавил public/packs-test к папкам в кеше:

      - save_cache:
          key: v1-bundle-{{ checksum "Gemfile.lock" }}-{{ checksum "yarn.lock" }}
          paths:
            - vendor/bundle
            - public/packs-test

Как видите, я добавил контрольную сумму файла yarn.lock в ключ кеша, чтобы убедиться, что кеш регенерировался, если что-то изменилось в паках.

не знаю, почему за вас проголосовали, это работает и для меня, спасибо!

James N 14.02.2020 01:40

Это решение сработало и для меня. Но у меня возник вопрос куда/как вы добавляли папки в кэш

Int'l Man Of Coding Mystery 07.04.2020 23:53

Другие вопросы по теме