Comments 19
Не хватает лучшего результата, достигнутого ботом. Или проглядел?
Я создал специльный модуль «starter», который запускает все зависимости и приложение.
Обычно, когда используется такой ручной старт (без релиза) своего приложения и зависимостей, то эту функцию start/0 включают в модуль приложения — erl2048_app.
Первое — файл «erl2048.app.src». Не знаю, на самом деле, для чего он нужен, но добавил и свой проект на всякий случай.
Из этого файла rebar создает .app файл, необходимый для запуска приложения через application:start/1.
Я так понимаю, что эта штука следит, чтобы приложение не падало и перезапускает в случае надобности. Взял из примера — решил оставить.
В вашем примере супервизор ни за чем не следит, т.к. следить не за чем. Непосредственно в вашем приложении нет никаких процессов — вся логика в приложении cowboy.
Чем вас mnesia не устроила в качестве DB?
На самом деле — без разницы. И я уверен, что нужный интерфейс можно без проблем реализовать для любой СУБД.
Может, я просто зажал ОЗУ. Постоянно на моем VPS не хватает. Поэтому стараюсь использовать postgres для всех проектов.
Но в данной статье я хотел акцентировать внимание на логике, а не базе данных.
Может, я просто зажал ОЗУ. Постоянно на моем VPS не хватает. Поэтому стараюсь использовать postgres для всех проектов.
Но в данной статье я хотел акцентировать внимание на логике, а не базе данных.
mnesia — это синоним слова «боль».
следующим шагом можно сделать, внедрение супервизоров, и по процессу на пользователя.
Поздравляю с первым проектом, но код конечно оставляет не лучшие впечатления. Книжечку бы вам почитать какую-нибудь.
Вместо
лучше написать
(причем inets, mochiweb вряд ли реально нужно стартовать) но более правильный подход — указать все эти приложения в том самом
Как уже сказали,
Для запуска обычно так делают:
(см
erl2048_app:start/2
должна возвращать Pid корневого супервизора приложения, у вас же возвращается Pid подключения к БД. Это очень плохо, т.к. будет некорректно работать application:stop и не будет детектиться падение процессов приложения.Вместо
start() ->
application:start(ranch),
application:start(crypto),
application:start(cowlib),
application:start(cowboy),
application:start(inets),
application:start(mochiweb),
application:start(erl2048).
лучше написать
start() ->
% генератор списков
[application:start(App) || App <- [ranch,crypto, cowlib, cowboy,inets, mochiweb, erl2048]].
(причем inets, mochiweb вряд ли реально нужно стартовать) но более правильный подход — указать все эти приложения в том самом
app.src
файле и использовать функцию application:ensure_all_started/1
% file: erl2048.app.src
{applications, [
kernel,
stdlib,
ranch,crypto, cowlib, cowboy
]},
% file: erl2048_app.erl
start() -> application:ensure_all_started(erl2048).
Как уже сказали,
start/0
лучше перенести в erl2048_app
.Для запуска обычно так делают:
erl -pa ../erl2048/ebin -pa deps/*/ebin -s erl2048_app start -noshell -detached
(см
-s erl2048_app start
).На самом деле был бы очень признателен, если что-нибудь посоветуете. Потому что мне трудно было хоть что-то найти.
Посоветую что? Не понял вопроса.
Книжечку
Ааа =) Мне очень помогла Erlang and OTP in Action, но тогда ещё не существовал Learn You Some Erlang for great good! , возможно он лучше. Но «OTP in action» крутая книжка, её должно хватить.
Удивительно как игра заинтересовала всех. Я также не удержался и сделал свою копию, но больше по тому что в оригинале нельзя было играть на моем windows phone 7. А также хотелось испробовать AngularJS. Написал игру с нуля честно не подсматривая в исходники. Рейтинг кстати я сделал для контакта но к сожалению мое приложение не одобрили так как к тому времени когда я его доделал уже две игры находилось в каталоге :(
Sign up to leave a comment.
2048 на Erlang