Как стать автором
Обновить

Комментарии 29

Спасибо! Очень доступно изложено!
Рад, что понравилось :-)
Кто все туториалы по Derby минусует? Неужели проделки любителей Angular? Не хочется на них думать :-)
Это хабр, привыкайте.
Привыкаю…
Еще раз спасибо за инвайт.
Рад, что кому-то успел отдать, пока не слили. =) Тем более derby.js действительно показался интересным на тот момент.
Тем более derby.js действительно показался интересным на тот момент.

А на текущий момент? :)
На текущий момент наиболее насущные проблемы это архитектурная организация кода. Ужас как не люблю спагетти-код. Больше смотрю сейчас в сторону marionette.js. Но к дерби возможно и вернусь когда-то.
Вот кстати хороший вопрос в тему…
Как грамотно в Derby структурировать код Избегая «спагетти» и соответствую SOLID?
«Спагетти» — это больше навыки программирования (в данном случае на js/node.js). Стркутура кода сильно зависит от приложения. Для социальной сети она будет одна, для игры другая. Ну а SOLID конечно соответствуйте, Derby вам тут, как минимум, не помешает.
Тут писал о marionette.js
Нет у меня такой команды derby bare

D:\node\derby>derby --help

  Usage: derby [options] [command]

  Commands:

    new [dir] [app]
    Create a new Derby project. If no directory name is specified, or the
    name `.` is used, the project will be created in the current directory.
    A name for the default app may be specified optionally.

  Options:

    -h, --help       output usage information
    -V, --version    output the version number
    -c, --coffee     create files using CoffeeScript
    -n, --noinstall  do not run `npm install`


D:\node\derby>derby -V
0.5.9
Команда была добавлена месяц назад. Обновите Дерби, пожалуйста.
Спасибо, я вроде 0.5.10 видел мельком на github-е, но на сайте 0.5.9, — думал последняя стабильная…
К сожалению сайт и документация не всегда успевают за github.
Ээх! Засада. Статика — работает. Локальная «динамика» — работает. А многопользовательская — нет. Надо курить мануал — что-то не то на win7-64. Или переходить на linux :)
Вот дамп:
Trace: [Error: ERR unknown command 'evalsha']
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\lib\server\session.js:485:19
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\lib\server\useragent.js:185:23
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\node_modules\livedb\lib\index.js:475:53
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\node_modules\livedb\lib\index.js:696:53
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\node_modules\livedb\lib\index.js:185:16
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\node_modules\share\node_modules\livedb\lib\index.js:144:16
    at Command.callback (C:\Dropbox\web\node\Derby\habr\node_modules\redis\index.js:1140:13)
    at RedisClient.return_error (C:\Dropbox\web\node\Derby\habr\node_modules\redis\index.js:531:25)
    at ReplyParser.<anonymous> (C:\Dropbox\web\node\Derby\habr\node_modules\redis\index.js:282:14)
    at ReplyParser.EventEmitter.emit (events.js:95:17)
Operation was rejected (Error: ERR unknown command 'evalsha'). Trying to rollback change locally.
[Error: ERR unknown command 'evalsha']

C:\Dropbox\web\node\Derby\habr\node_modules\derby\lib\View.server.js:41
  return json.replace(/[&']/g, function(match) {
              ^
TypeError: Cannot call method 'replace' of undefined
    at stringifyData (C:\Dropbox\web\node\Derby\habr\node_modules\derby\lib\View.server.js:41:15)
    at Object.View._renderScripts (C:\Dropbox\web\node\Derby\habr\node_modules\derby\lib\View.server.js:176:7)
    at C:\Dropbox\web\node\Derby\habr\node_modules\derby\lib\View.server.js:156:10
    at null._onTimeout (C:\Dropbox\web\node\Derby\habr\node_modules\derby\node_modules\racer\lib\Model\bundle.js:14:5)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)


Для начала буду ставить VirtualBox…
У меня все ОК на win 7- 64
У вас видимо Redis 2.4

В live-db используются комманда evalsha (выполнение Lua скриптов). Ее добавили только в Redis 2.6
Да, точно. Вот, ведь, невнимательный я :) Сходу нашёл только x86 установщик. Ссылочку не подскажете? Ставить VS и «билдить» что-то не хочется ;)
Я вот отсюда собирал: github.com/MSOpenTech/redis

И это было последней каплей для перехода на Linux :-) Рекомендую.
Да, там есть .exe в архивах. Попробую подменить. Спасибо!
Заработало. Щастье :)
А не могли бы Вы детальней рассказать, как собирать derbyjs под windows? Я вот просто не могу понять, как hiredis собрать правильней.
создается коллекция path = создается коллекция **page**
Исправил, спасибо
Спасибо за труды, очень интересно! Объясните пожалуйста, зачем делать render в subscribe? Если вынести, работает так же:
app.get('/', function(page, model) {
  model.subscribe('page.text', function(err) {
    if (!model.get('page.text')) {
      model.set('page.text', 'text in model');
    }
  })
  page.render();
});
Ну да, здесь общая логика такая, чтобы при первом запросе на сервере отдать уже полностью готовую страницу (чтобы поисковики нормально индексировали), нужно делать render после того, как все данные в модель уже загрузились.

subscribe регистрирует подписку на данные, но кроме того его callback срабатывает тогда, когда данные полностью загрузились в модель.

Если же вынести рендер, то пользователь все-равно увидит все то же самое, да и в случае, если этот код будет на клиенте — тоже разницы не будет. Вопрос именно в случае сервера, что отправит сервер клиенту и важно это лишь для индексации.
Спасибо :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории