Size: a a a

Эликсир и Вунш

2020 September 16

c🦊

cleverfox 🦊 in Эликсир и Вунш
DooDLeZz*
Народ, всем доброго времени суток. Вопрос по фениксу, может кто реализовывал подобное. В общем, есть umbrella проект с несколькими phoenix приложениями внутри. У одного приложения (Master), Endpoint запущен с server: true, у остальных (App1, App2) приложений он false.

Вопрос заключается в следующем: Когда я на одной из страниц в Master генерирую ссылку, вызывая App1Web.Router.Helpers.page_path(conn, :index), и при этом, на одной из страниц App1 генерирую ссылку MasterWeb.Router.Helpers.page_path(conn, :index), то при компиляции я получаю предупреждение вида:
function App1.Router.init/1 is undefined (module App1.Router is not available). При этом компиляция происходит, ссылки корректно генерируются а приложение работает в штатном режиме. Кто нибудь в курсе с чем это связано и как "кошерно" решить данную задачу, настроив перелинковку между несколькими phoenix приложениями внутри одного umbrella проекта, чтобы компилятор не ругался?

ЗЫ: эти warning-и появляются только раз. При повторной компиляции предупреждение не возникает.
Потому что при повторной компиляции у тебя файлы эти не перекомпилируются. По идеи приложения под umbrella компилируются отдельно, поэтому они не знают про модули других приложений, отсюда и предупреждение.  А при запуске в code path есть все приложения, так что в рантайме модули есть. Как правильно это исправить не знаю.
источник

D

DooDLeZz* in Эликсир и Вунш
cleverfox 🦊
Потому что при повторной компиляции у тебя файлы эти не перекомпилируются. По идеи приложения под umbrella компилируются отдельно, поэтому они не знают про модули других приложений, отсюда и предупреждение.  А при запуске в code path есть все приложения, так что в рантайме модули есть. Как правильно это исправить не знаю.
Собственно к такому выводу пришел и я, и решение не придумал. Честно говоря сама по себе идея перекрестной перелинковки в elixir приложениях - так-себе, пусть и не лишена логики
источник

M

Maxim in Эликсир и Вунш
DooDLeZz*
Народ, всем доброго времени суток. Вопрос по фениксу, может кто реализовывал подобное. В общем, есть umbrella проект с несколькими phoenix приложениями внутри. У одного приложения (Master), Endpoint запущен с server: true, у остальных (App1, App2) приложений он false.

Вопрос заключается в следующем: Когда я на одной из страниц в Master генерирую ссылку, вызывая App1Web.Router.Helpers.page_path(conn, :index), и при этом, на одной из страниц App1 генерирую ссылку MasterWeb.Router.Helpers.page_path(conn, :index), то при компиляции я получаю предупреждение вида:
function App1.Router.init/1 is undefined (module App1.Router is not available). При этом компиляция происходит, ссылки корректно генерируются а приложение работает в штатном режиме. Кто нибудь в курсе с чем это связано и как "кошерно" решить данную задачу, настроив перелинковку между несколькими phoenix приложениями внутри одного umbrella проекта, чтобы компилятор не ругался?

ЗЫ: эти warning-и появляются только раз. При повторной компиляции предупреждение не возникает.
app1 добавлен в депендеси master?
источник

D

DooDLeZz* in Эликсир и Вунш
Maxim
app1 добавлен в депендеси master?
Добавлен
источник

D

DooDLeZz* in Эликсир и Вунш
И при генерации ссылок app1  -> Master проблем нет, но вот при master -> app1 появляется warning
источник

c🦊

cleverfox 🦊 in Эликсир и Вунш
DooDLeZz*
И при генерации ссылок app1  -> Master проблем нет, но вот при master -> app1 появляется warning
а, так попробуй наоборот депсы добавить
источник

D

DooDLeZz* in Эликсир и Вунш
Тогда та же проблема, но наоборот :)
источник

D

DooDLeZz* in Эликсир и Вунш
В том и суть, что ссылки перекрестные, они друг на друга ссылаются
источник

D

DooDLeZz* in Эликсир и Вунш
Идея изначально была антипаттерном, я решил слить дочерние приложения в master и просто создать разные файлы роутинга
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Роутинг это верх, шаблон - это низ. Почему они должны быть в одном приложении?
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Есть common вещи, а есть master. И это РАЗНЫЕ вещи
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
все апы могут иметь в зависимостях common
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
А роутер (master) может иметь в зависимостях всех
источник

M

Maxim in Эликсир и Вунш
DooDLeZz*
В том и суть, что ссылки перекрестные, они друг на друга ссылаются
https://elixirforum.com/t/umbrella-app-routing-with-plug-router-app-phoenix-app/10213/9?u=vermaxik
возможно этот топик может помочь решить вашу вопроблему
источник

D

DooDLeZz* in Эликсир и Вунш
Благодарю, сейчас посмотрим
источник
2020 September 17

V

V in Эликсир и Вунш
Źmićer Rubinštejn
А роутер (master) может иметь в зависимостях всех
источник

V

V in Эликсир и Вунш
DooDLeZz*
В том и суть, что ссылки перекрестные, они друг на друга ссылаются
Это называется "циклическая зависимость" ("circular dependency")
источник

V

V in Эликсир и Вунш
Напомню, что стрелочка "зависеть от" совпадает по направлению с "знать о". При этом "не знать о" - значит "не зависеть от". Например Domain содержит интерфейсы для DataProvider, и DataProvider их реализует - это значит что DataProvider зависит от Domain, а Domain - НЕ зависит от DataProvider. По неопытности может показаться, что если кривая реализация DataProvider обрушит работу Domain - то значит Domain зависит от DataProvider. Нет, это не та зависимость. В архитектурном планировании термины "зависеть от" и "знать о" - можно считать одно и то же. Слой-эгоист Domain не знает ничего о существовании и деталях реализации DataProvider, и поэтому независим. Ациклический граф зависимостей проще и предсказуемее в планировании, поэтому опытные архитекторы предпочитают его просто для того чтобы уходить домой в пять и высыпаться.
источник

МБ

Максим Барулин... in Эликсир и Вунш
источник
2020 October 12

PT

Pavel Tsiukhtsiayeu in Эликсир и Вунш
Всем привет. Я Павел из Минска. Уже несколько лет пишу на Elixir и занимаюсь стартапами. Вот собственной один из стартапов удался и мы с ребятами сейчас ищем опытного программиста. Не сочтите за спам, но HR агенствам я не доверяю 🙂

-------------------

Compass Beauty is a California based startup that specializes in skin care. Our main goal is to make skin care predictable by the means of science, accurate measurements with medical devices and machine learning. Our distributed team is rather small but consist of skilled professionals with decades of experience in chemistry, bio technology, machine learning and programming.

We are looking for an Elixir/Phoenix developer to join our small team and help build out, operate, and maintain the Compass Beauty web platform. This is a full-time remote position. The ideal candidate is an experienced developer, prepared to own all elements of implementation, delivery, and maintenance, including front-end (optional) and back-end development, and potentially dev-ops.

As part of a team you will be building data ingestion pipelines, parsing and scrapping tools, various web apps and what not. We will find a good use to your skills and push you the limits.You should expect priorities to change quickly and be ready to shift your work efforts between different tasks.

The ideal candidate should already have experience working in a production setting with most components of our dev and ops stacks:

• Phoenix / Elixir / Erlang
• PostgreSQL
• HTML5 / CSS3 / JavaScript (React)
• Elixir libraries: Flow / Broadway
• Docker
• Heroku / Google cloud
• Git / GitHub Actions


Spoken English is a must-have.

Please send your resume to pavel@compassbeauty.com or you may reach me directly in Telegram @paveltyk
источник