2012-01-09 6 views
3

Я хотел бы написать автономное приложение Erlang, которое можно запускать точно так же, как любая другая программа (щелкнув исполняемый файл .exe). Что-то вроде Wings3D.Запуск приложения с Erlang

Как я могу это сделать? Каков наилучший способ сделать это возможным? Я на платформе Windows, если это важно.

второй UPDATE:

Ну, я не экспортировали функцию promodb:start/0 и что послужило причиной Erlang could'n начать (и, как говорит Muzaaya Joshua, werl -s не работает). Но теперь у меня другая странная проблема. В моей rebar.config У меня 2 зависимостей:

{deps, [ 
      {cowboy, ".*", {git, "https://github.com/extend/cowboy.git"}}, 
      {erlydtl, ".*", {git, "https://github.com/evanmiller/erlydtl.git"}} 
     ] 
}. 

и после я начинаю Erlang используя

erl -pa ebin deps/cowboy/ebin deps/erlydtl/ebin deps/proper/ebin -s promodb 

Я нахожу приложением: which_application(), который запускается только Cowboy:

[{cowboy,"Small, fast, modular HTTP server.","0.4.0"}, 
{stdlib,"ERTS CXC 138 10","1.18"}, 
{kernel,"ERTS CXC 138 10","2.15"}] 

As насколько я знаю, Erlang должен запустить все необходимые приложения, которые я вложил в свой файл promodb.app, как:

{application, promodb, 
[ 
    {description, ""}, 
    {vsn, "0.1"}, 
    {registered, [promodb_sup]}, 
    {applications, [ 
        kernel, 
        stdlib, 
        cowboy, 
        erlydtl 
       ]}, 
    {mod, { promodb, []}}, 
    {env, []} 
]}. 

Что я сделал не так?

+0

Существует аналогичный вопрос: http://stackoverflow.com/questions/1795628/erlang-compilation-erlang-as-stand-alone-executeable Он имеет ссылку на это руководство, которое может вам помочь: http: // www .sics.se/~ joe/sae.html – mqsoh

+0

Спасибо за эту ссылку, я уже ее видел.Не помогает, так как его развитие прекратилось. Но, как вы видите, у меня есть еще одна, гораздо более простая проблема, которая не решена: как запустить Erlang с произвольным приложением в Windows? – Radek

ответ

3

Я использую rebar escriptize для упаковки отдельного пакета, такого как арматурный профиль. Затем вы можете использовать ./PackageName в linux или escript.exe PackageName в окнах.

+0

Спасибо за это, я не знаю, что арматура имеет такую ​​команду. К сожалению, в моем случае это не сработает. Я получил ошибку: escript: ошибка исключения: undefined function promodb: main/1 (хотя я даже добавил такую ​​функцию в модуль promodb). – Radek

+0

Привет, у меня есть '{escript_incl_apps, []}. {escript_emu_args, "%%! -smp auto \ n"}. 'в моем rebar.config, это может вам помочь. Вы также можете проверить http://www.erlang.org/doc/man/escript.html, посмотреть, как упаковать файлы в отдельный пакет escript. – shian

+0

Спасибо, я проверю это. – Radek

2

Мне кажется, вам нужно создать пакет выпуска и сценарий загрузки, как описано в documentation.

+0

Спасибо за ответ, но я не уверен, решает ли он всю проблему. После выпуска релиза я должен иметь полную систему Erlang с моим приложением, готовым к развертыванию, но у меня все еще нет отдельной программы. Как мне это сделать ? – Radek

1

На самом деле опция -s работает везде. Просто используйте erl NOT werl . Команда werl пытается загрузить графический интерфейс в Windows.

BitRock Install Builder - отличный инструмент, который вам нужно проверить. Yaws Web Server написан в Эрланге, использует его и многие другие приложения.

+0

Ну, по-видимому, ни werl, ни erl не работают. С erl -s я получил ту же ошибку, как раз в стандартной подсказке cmd. – Radek

+1

'erl-s mnesia' запустит оболочку erlang и начнет mnesia вместе с ней. Помните, если у вас есть приложение, называемое: myapp, и в нем есть модуль: myapp.erl, то пусть функция, которая запускает ваше приложение, будет: 'start/0', так что вы просто выполните:' erl -s myapp' –

1

У Erlydtl нет поведения приложения, он работает как библиотека. Как вы можете видеть в примерах erlydtl, приложение не нужно запускать.

https://github.com/evanmiller/erlydtl#template-compilation

Проверьте это:

Эрл -pa Эбин DEPS/*/Эбин

1> erlydtl: компилировать (< < "{{Foo}}" >>, my_module_name).

Это работает?

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

Смежные вопросы