Предварительно скомпилированные одностраничные приложения в приложении Phoenix
У меня есть предварительно скомпилированное приложение ember.js (которое здесь не имеет значения для fronted-js-framework), которое в основном состоит из папки с файлом index.html и нескольких ресурсов js / css.
Я поместил эту папку в / priv / static в моем приложении Phoenix и попытался настроить маршрутизацию для ее обслуживания ... пока безуспешно. Я на версии Phoenix 0.17.1 (так же, как 1.0 afaik). Я попробовал следующие шаги, в том порядке:
В endpoint.ex я удалилonly: ~w(...)
фильтр.Реализован минимальный контроллер с одним действием для обслуживания файла:def index(conn, _params) do redirect conn, to: "/my_app/index.html" end
добавил контроллер в мои маршруты.get "/my_app", MyCustomController, :index
Ни один из вышеперечисленных шагов не сработал, я получаю только ошибкуno route found for GET /my_app/index.html
, Как я мог решить эту проблему? Я просто хочу сопоставить URL"/my_app"
(или, если ничего не работает,"/my_app/index.html"
) к путиpriv/static/my_app/index.html
в моем приложении Феникс. Есть идеи?
РЕДАКТИРОВАТЬ:
Основной рабочий процесс, который я пытаюсь реализовать, заключается в следующем:
У меня есть разные разработчики, которые создают некоторые SPA-файлы ember.js в своей специальной папке, расположенной в$phoenix_root/apps/
, Итак, у меня есть здание разработчика$phoenix_root/apps/my_app
с тлеющим углем и тлеющим углем. Этот разработчик используетember server
при разработке своего приложения, и имеетmix phoenix.server
работает в фоновом режиме, потому что само приложение Phoenix предоставляет необходимые данные в виде RESTful API.
После каждой реализованной функции разработчик внешнего интерфейса набираетember build [...]
эта задача компилирует все приложение внешнего интерфейса ember.js в одну папку с файлом index.html и некоторыми активами и перемещает эту папку в$phoenix_root/web/static/assets/my_app
, Затем Феникс (или поздний завтрак) запускает и копирует этот материалкак есть в$phoenix_root/priv/static/my_app
, готовый быть обслуженным как любой другой актив.
Суть заключается в том, чтобы иметь возможность создавать кучу изолированных «внешних интерфейсов» в виде автономных пакетов в единой кодовой базе (приложение phoenix), тогда как у самого приложения phoenix есть дополнительные (другие) вещи, которые нужно сделать.
Поскольку разработчики Frontend автоматически генерируют SPA каждый раз, я всегда изменяю постоянно обновляемый файл index.html.высоко хочу избежать. С точки зрения производительности, было бы лучше всего просто обслуживать эти SPA как статические файлы, которые они есть - они инициализируются самостоятельно в браузере пользователя.
Я надеюсь, что это добавляет некоторые пояснения, почему я делаю это.
РЕДАКТИРОВАТЬ 2:
У меня есть рабочее решение, посмотрите пример репозитория, который я создал для демонстрационных целей:https://github.com/Anonyfox/Phoenix-Example-Multiple-SPA-Frontends
Необходимые модификации приложения феникс:
модифицироватьendpoint.ex
' Plug.Static
включить SPA и их активы.запустить снова mix phoenix.server
после этого!Необходимые изменения в приложениях ember.js:
добавлять"output-path": "../../web/static/assets/*my_app*/"
в.ember-cli
, удобство настройки для запускаember build
всегда с этим путемдобавлятьbaseURL: '/*my_app*/'
а такжеlocationType: 'none'
вconfig/environment.js
rm -rf .git
если вы хотите, чтобы весь код был версионирован в рамках одного проекта (цель этого вопроса)