Pull to refresh

Comments 19

Не хватает лучшего результата, достигнутого ботом. Или проглядел?
Суть в том, что бота я еще не писал. Только сервер закончил, где он играть будет =)
Я создал специльный модуль «starter», который запускает все зависимости и приложение.

Обычно, когда используется такой ручной старт (без релиза) своего приложения и зависимостей, то эту функцию start/0 включают в модуль приложения — erl2048_app.

Первое — файл «erl2048.app.src». Не знаю, на самом деле, для чего он нужен, но добавил и свой проект на всякий случай.

Из этого файла rebar создает .app файл, необходимый для запуска приложения через application:start/1.

Я так понимаю, что эта штука следит, чтобы приложение не падало и перезапускает в случае надобности. Взял из примера — решил оставить.

В вашем примере супервизор ни за чем не следит, т.к. следить не за чем. Непосредственно в вашем приложении нет никаких процессов — вся логика в приложении cowboy.
Спасибо. Теперь многое стало на свои места.
На самом деле — без разницы. И я уверен, что нужный интерфейс можно без проблем реализовать для любой СУБД.
Может, я просто зажал ОЗУ. Постоянно на моем VPS не хватает. Поэтому стараюсь использовать postgres для всех проектов.
Но в данной статье я хотел акцентировать внимание на логике, а не базе данных.
Просто mnesia — часть OTP. Для того, чтобы ее использовать, не надо ничего писать, настраивать и устанавливать.
mnesia — это синоним слова «боль».
Что с ней не так? При использовании для хранения рекордов пользователей-то?
В таких простых случаях обычно хватает ets/dets. Лично у меня остались крайне негативные впечатления от мнезии.
следующим шагом можно сделать, внедрение супервизоров, и по процессу на пользователя.
Если не ошибаюсь, ковбой и так делает отдельный процесс на пользователя.
Поздравляю с первым проектом, но код конечно оставляет не лучшие впечатления. Книжечку бы вам почитать какую-нибудь.

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).
На самом деле был бы очень признателен, если что-нибудь посоветуете. Потому что мне трудно было хоть что-то найти.
Посоветую что? Не понял вопроса.
Удивительно как игра заинтересовала всех. Я также не удержался и сделал свою копию, но больше по тому что в оригинале нельзя было играть на моем windows phone 7. А также хотелось испробовать AngularJS. Написал игру с нуля честно не подсматривая в исходники. Рейтинг кстати я сделал для контакта но к сожалению мое приложение не одобрили так как к тому времени когда я его доделал уже две игры находилось в каталоге :(
Ну вы можете отравить pull request для WP7.
Sign up to leave a comment.

Articles