Как установить приложение в Erlang? - PullRequest
2 голосов
/ 24 мая 2011

В моем проекте я хочу использовать mysql, поэтому я проверяю это https://github.com/dizzyd/erlang-mysql-driver. Я хочу знать, как установить приложение, чтобы мой проект мог взаимодействовать с ним

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

арматура может усложнить ситуацию, если вы уже начали выкладывать свое приложение (уже сделали некоторую кодировку) или если вы новичок, однако, если ваш проект является приложением 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", все будет хорошо. успех!

3 голосов
/ 24 мая 2011

Посмотрите на "арматуру" - https://bitbucket.org/basho/rebar/wiki/Home

Может использоваться для установки зависимостей и создания независимых выпусков.

И быстрый взгляд на erlang-mysql-driver, который вы хотите использовать, показывает, что он также использует rebar для управления зависимостями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...