арматура может усложнить ситуацию, если вы уже начали выкладывать свое приложение (уже сделали некоторую кодировку) или если вы новичок, однако, если ваш проект является приложением erlang / OTP, тогда я предлагаю сначала организовать свой код в соответствии с рекомендуемой файловой системой, например:
MyProject--/src
/ebin
/lib
/include
/priv
/doc
/examples
/test
/Emakefile
Emakefile
- важный файл. Может не иметь расширения файла. Это позволяет BIF: make:all()
скомпилировать все исходные модули erlang, на которые вы указали, и перенести все файлы .beam в нужное место назначения.
Например: если я хочу, чтобы все модули в src
были скомпилированы и перенести файлы лучей в ebin
, я ввожу это в Emakefile
{"src/*", [debug_info, netload,strict_record_tests,warn_obsolete_guard,{outdir, "ebin"}]}.
В этом случае я бы запустил оболочку erlang с указанием pwd()
в папке MyProject
, чтобы при вызове функции make:all()
найти файл Emakfile
и собрать все мои файлы src.
Теперь предположим, что у вас есть другое OTP-приложение, которое вы хотите использовать в качестве дополнительного пакета в вашей сборке. Если он похож на OTP, как я показал вам, и еще не построен, т.е. еще не made , я имею в виду, что только его src и его папка ebin пусты, или он может уже содержать .APP file
, Затем вы копируете это приложение OTP в папку lib
, чтобы ваше приложение выглядело так:
MyProject--/src
/ebin
<b>/lib/some_otp_app-1.0</b>
/include
/priv
/doc
/examples
/test
/Emakefile
тогда мы изменим наш Emakefile
, чтобы он выглядел так:
{"src/*", [debug_info, netload,strict_record_tests,warn_obsolete_guard,{outdir, "ebin"}]}.
{"lib/some_otp_app-1.0/src/*", [debug_info, netload,strict_record_tests,warn_obsolete_guard,{outdir, "lib/some_otp_app-1.0/ebin"}]}.
В папке MyProject
вы можете поместить сценарий оболочки, который запустит ваш проект, и добавить все соответствующие пути ebin в путь кода вашего узла. Этот сценарий sh может выглядеть следующим образом:
#!/bin/bash
erl \
-name my_node@my_domain \
-pa ./ebin ./lib/*/ebin ./include \
-mnesia dump_log_write_threshold 10000 \
-eval "make:all()"
Вы можете сохранить этот файл как start_project.sh
. Следовательно, когда вы вносите изменения в свой исходный код, даже во время запуска проекта, когда вы запускаете скрипт sh с указанием пути к терминалу в папке: MyProject
, вы делаете это:
$pwd
/export/home/your_user_name/MyProject
$sh start_project.sh
Это запустит ваш проект с узла, который вы указали в скрипте, и скомпилирует все файлы src, которые были изменены, когда он был выключен. Кроме того, вы можете также вызывать: make:all()
в вашей оболочке всякий раз, когда вы вносите изменения в свой код src. затем вы должны вызвать: l(some_module)
после того, как erlang vm перезагрузит новый объектный код скомпилированного модуля.
Итак, весь ваш проект теперь будет выглядеть так:
MyProject--/src
/ebin
<b>/lib/some_otp_app-1.0</b>
/include
/priv
/doc
/examples
/test
/Emakefile
/start_project.sh
Так что, если вы замените драйвер erlang для приложения mysql этим "some_otp_app-1.0", все будет хорошо. успех!