У меня есть предварительно скомпилированное приложение ember.js (в котором фронт-js-framework не имеет значения здесь), который в основном состоит из папки с файлом index.html и несколько js/css активов.Предварительно скомпилированные приложения для одной страницы в приложении Phoenix
Я разместил эту папку под/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
- добавлен контроллер к моему routes.ex:
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
в моем приложении phoenix. Есть идеи?
EDIT:
Основной рабочий процесс Я пытаюсь реализовать это следующим образом:
У меня есть разные разработчики, которые строят некоторые ember.js ООР в их выделенной папке, расположенной в $phoenix_root/apps/
. Поэтому у меня есть разработчик $phoenix_root/apps/my_app
с ember и ember-cli. Этот разработчик использует ember server
при разработке своего приложения и работает в фоновом режиме mix phoenix.server
, потому что сам приложение phoenix предоставляет необходимые данные в качестве RESTful API.
После каждой реализованной функции, типы разработчиков интерфейса ember build [...]
, эта задача компилирует все приложение ember.js внешнего интерфейса в одну папку с файлом index.html и некоторыми активами, и перемещает эту папку $phoenix_root/web/static/assets/my_app
. Затем феникс (или, бранч) запускает и копирует этот материал as-is - $phoenix_root/priv/static/my_app
, готовый к обслуживанию, как и любой другой актив.
Суть заключается в том, чтобы создать кучу изолированных «интерфейсов» в виде автономных пакетов в рамках одной базы кода (приложение phoenix), в то время как у самого приложения phoenix есть дополнительные (другие) вещи.
Поскольку Frontend-Developers автоматически генерируют SPA каждый раз, изменение постоянно обновляемого файла index.html - это то, что я высоко хочу избежать. По производительности было бы лучше всего просто обслуживать эти SPA как статические файлы, которые они есть - они инициализируются самостоятельно в браузере пользователя.
Надеюсь, это добавит некоторые разъяснения, почему я это делаю.
EDIT 2:
У меня есть рабочее решение сейчас, увидеть пример репо, который я создал для демонстрационных целей: https://github.com/Anonyfox/Phoenix-Example-Multiple-SPA-Frontends
необходимые изменения в приложение феникс:
- модифицируют
endpoint.ex
'Plug.Static
, чтобы включить ООПТ и их активы. - перезапуск
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
если вы хотите, чтобы весь код был версией в рамках одного проекта (цель этого вопроса)
Я сделал буквально то же самое в новом приложении, и все получилось просто отлично. У вас есть простое приложение, которое показывает проблему? –
Кроме того, чтобы быть уверенным, что если вы измените что-либо в 'lib', вам нужно перезагрузить приложение. –
Поскольку вы используете emberjs (с отдельными разработчиками), я бы предложил вам проверить этот аддон для развертывания. http://ember-cli.github.io/ember-cli-deploy/docs/v0.4.x/ Также проверьте эти - http://blog.abuiles.com/blog/2014/07/08/lightning-fast-deployments-with-rails/ - https://www.youtube.com/watch?v=QZVYP3cPcWQ –