Compojure статические ресурсы работают в dev, но не prod - PullRequest
0 голосов
/ 02 июля 2018

Я создаю веб-приложение с Compojure 1.6.0. Для сторонних библиотек JS я устанавливаю их с помощью npm, который помещает их в папку с именем node_modules (не настраивается). Чтобы обслужить их, я сделал это:

(route/files "/node_modules" {:root "node_modules/"})

, который отлично работает в разработке. Для производства я развернул Uberwar, поэтому перед созданием войны я просто скопировал эти файлы в общедоступные ресурсы:

# deploy.sh
cp -r node_modules/ resources/public/node_modules/
lein ring uberwar

Это все отлично работает.

Теперь я хотел бы изменить свои пути URI на /static/ вместо /node_modules/. Я попытался изменить свою линию маршрутизации, чтобы сказать:

(route/files "/static" {:root "node_modules/"})

и затем обновляет все ссылки HTML, которые указывают на эти URI. Это работает, как и ожидалось, в разработке (lein ring server-headless), но в производственной (развернутый warfile) происходит сбой. Мой обработчик route/not-found вызывается для любого пути в /static/.

Что дает? Почему путь URI как-то связан с этим, и только в одной среде?

1 Ответ

0 голосов
/ 03 июля 2018

Я использовал wrap-defaults (что кажется довольно обязательным для любой нетривиальной веб-страницы), и он добавляет route/resources по умолчанию. Это был неработоспособен в dev, но заставил prod искать node_modules по имени.

Это не было проблемой, но она скрывала реальную проблему. Когда я изменил вызов route/files, он изменил поведение dev, но это не использовалось в prod.

Я не знаю, что такое правильное решение, но сейчас я отключаю :static в wrap-defaults и выполняю соответствующую пару вызовов для route/files и route/resources я полностью контролирую это.

...