Rails Прекомпиляция ресурсов для CI
Я столкнулся со странными ошибками, из-за которых мой первый тест Capybara/phantomjs всегда не удался, потому что настройки по умолчанию с config.assets.compile == true
в первом тесте произойдет компиляция ресурсов, что приведет к тайм-ауту оценщика JS.
Поскольку увеличение времени ожидания накопителя Capybara не похоже на реальное решение, так как я использую CircleCI 2.0, я хотел бы воспользоваться преимуществами рабочих процессов, чтобы добавить rails assets:precompile
на моих этапах сборки, так что предварительно скомпилированные ресурсы могут быть использованы в дальнейших работах (например, тесты rspec и cucumber/capybara)
Я пытался установить в моем config/environments/test.rb
config.assets.compile = (ENV['CI'] == 'true' ? false : true)
... и запустить RAILS_ENV=test rails assets:precompile
в моей работе, но теперь я получаю странные ошибки No route matches [GET] "/images/
и т.д., что я не получал раньше. Я не совсем уверен, куда Rails помещает эти предварительно скомпилированные активы по сравнению с тем, кто мог бы пролить немного света?
мой config.yml
(*defaults
включить определения контейнера и переменные среды, такие как RAILS_ENV=test
). Извините за linting, circleCI 2.0 использует модифицированный YAML...
jobs:
build:
<<: *defaults
steps:
- restore_cache:
keys:
- source-v1-{{ .Branch }}-{{ .Revision }}
- source-v1-{{ .Branch }}-
- source-v1-
- checkout
- save_cache:
key: source-v1-{{ .Branch }}-{{ .Revision }}
paths:
- ".git"
- restore_cache:
key: workspace-bundle-{{ checksum "Gemfile.lock" }}
- run:
name: Bundle Install
command: bundle install --path=vendor/bundle --jobs=4
- save_cache:
key: workspace-bundle-{{ checksum "Gemfile.lock" }}
paths:
- vendor/bundle
- run:
name: compile assets
command: bundle exec rails assets:precompile
- persist_to_workspace:
root: ~/workspace
paths:
- ./*
rspec:
parallelism: 2
<<: *defaults
steps:
- attach_workspace:
at: ~/workspace
- run: mkdir ~/rspec
- run:
name : run rspec tests
command : >
bundle exec rspec
-r rspec_junit_formatter
--format progress
--format RspecJunitFormatter
--out ~/rspec/junit.xml
$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings --timings-type=filename )
when: always
- store_test_results:
path: ~/rspec
cucumber:
<<: *defaults
steps:
- attach_workspace:
at: ~/workspace
- run: mkdir ~/cucumber
- run:
name: run cucumber tests
command: >
bundle exec cucumber
--format junit
--retry 1
--out ~/cucumber/junit.xml
when: always
- store_artifacts:
path: ~/cucumber
- store_test_results:
path: ~/cucumber
workflows:
version: 2
workflows:
jobs:
- build
- rspec:
requires:
- build
- cucumber:
requires:
- build
В моем config/environments/test.rb
файл, соответствующий конфиг включает в себя
# https://github.com/teampoltergeist/poltergeist/issues/677#issuecomment-222919584
config.assets.compile = (ENV['CI'] == 'true' ? false : true)
config.public_file_server.enabled = true
РЕДАКТИРОВАТЬ
При предварительной компиляции ресурсов, казалось бы, все ресурсы, включая изображения, попадают в public/assets/
тогда как Rails URL пытаются получить доступ /images/*
где это пошло не так?