Полезные советы в работе с Meteor



    Совсем недавно мне на глаза попался очень амбициозный проект Meteor. Меня подкупила его простота и скорость разработки приложений на нем. В этой статье будут показаны некоторые «хитрости» и полезные советы такие как: установка кастомных пакетов, добавление в проект плагинов jquery, развертывание проекта на боевом сервере и прочее.

    Этот пост предназначен для тех кто уже имеет минимальный опыт в работе с Meteor.

    1. Как устанавливать кастомные пакеты?

    Установите Meteorite. Meteorite нужен для удобной установки пакетов. Список пакетов пока не большой и доступен по ссылке.
    Вот последовательность шагов:
    1. чтобы установить Meteorite, установите сперва node.js скачав с nodejs.org
    2. выполняем
    sudo npm install -g meteorite
    

    3. после этого пакеты можно будет устанавливать добавлять при помощи комманд mrt install packagename | mrt add packagename, например
    mrt install jquery-ui | mrt add jquery-ui
    


    Синтаксис работы с Meteorite идентичен Meteor. Чтобы использовать и отлаживать свои пакеты, просто кладите их в директорию packages.

    2. Как пользоваться плагинами jQuery?

    Очень часто возникает ситуация, когда надо использовать какой-то плагин для jQuery, но его еще нет в пакетах.

    Делается это просто:
    1. скачиваем нужный плагин, распаковываем удяляем *.min.js (или же не сжатую версию), чтобы код плагина два раза не подключался
    2. создаем в корне приложения папку client/lib и кладем туда плагин вместе с css

    3. Как реализовать API на основе Meteor?

    Если вам вдруг захотелось организовать API (например взаимодействия с мобильными устройствами), то придется использовать следующий хак:
    1. создайте файл /server/api.js
    2. добавьте туда следующий код

    //api goes here
    var connect = __meteor_bootstrap__.require("connect");
    __meteor_bootstrap__.app
    .use(connect.query())
    .use(connect.bodyParser()) //I add this for file-uploading
    .use(function (req, res, next) {
         Fiber(function() {
            if(req.method == "GET"){
               if(req.url.indexOf('/test') !== -1){
                  res.writeHead(200, {'Content-Type': 'application/json'}); 
                  res.write(JSON.stringify({"test" : "test"}));
                 res.end();
                 return;
               }
    
            }       
          next();
      }).run();
    });
    
    


    3. теперь при обращении http://localhost:3000/test будет отдаваться json

    4. Как правильно деплоиться?

    Деплоиться очень просто. Для эффективной работы продакшена надо установить mongodb, nodejs и я рекомендую установить supervisior для стабильной работы приложения. После этого выполняем следующие шаги:

    1. редактируем файл переменные окружения sudo vim /etc/environment (в случае Ubuntu), добавляем PORT=3000 MONGO_URL=mongodb://localhost:27017/test, эти переменные хранят в себе порт на котором будет висеть проект и настройки подключения к mongodb
    2. на клиенте делаем
    mrt bundle project.tgz
    
    и заливаем его на продакшен
    3. распаковываем проект на продакшене
    tar zxvf project.tgz
    

    4. выполняем
    supervisor node <путь до папки>/bundle/main.js
    
    и открываем приложение на 3000 порту, все должно заработать

    5. Возник вопрос, но документации пока маловато?

    Активно общайтесь на Stackoverflow по тегу meteor — вам как правило будут быстро отвечать и это может вам здорово сэкономить время. В моем случае вопросы решаются максимум за 12 часов.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 13

    • UFO just landed and posted this here
        0
        Раз уж всплыла такая тема, может кто знает ответ на вопрос: При обновлении каких либо файлов (например из public) на клиенте рефрешится страница. Как это отключить? Может я не там искал, но в доках не нашел ничего про эту функцию…
          +1
          Честно говоря, не задавался этим вопросом и мне кажется это идет немного вразрес с их постулатом «Full Stack Reactivity. Make realtime the default. All layers, from database to template, should make an event-driven interface available.»

          Не совсем понимаю зачем отключать эту фичу при разработке на своем ноутбуке. На продакшене у вас ничего не поменяется пока вы не загрузите бандл с архивом проекта и не распакуете его.
            0
            Конкретно в моем случае, хотелось бы обновлять некоторые папки без рефреша, так как в одной из папок public хранятся картинки загружаемые пользователями. Информация и картинках хранится так же в mongo, поэтому хотелось бы навесить обработчик на событие изменения коллекции и обновлять часть страницы а не рефрешить всю. Этот подход полностью соответствует концепции фреймворка, т.к. это «Live HTML». Ну и соответственно в этом случае рефреш всей страницы меня только раздражает, т.к. я и без него все сделаю как надо :).

            В любом случае пока забил на это, т.к. проект for fun only, и как будет похоже на что то юзабельное, буду разбираться с рефрешем.
            0
            Не уверен, но попробуйте autopublish package убрать.
              0
              Вероятно это поможет, но это слишком радикальный подход на мой взгляд. Хотелось бы отключить рефреш только для «избранных» папок.
            0
            О, суровая челябинская разработка!
              +4


              Извините, не сдержался…
                0
                Что меня совершенно смущает в метеоре — это странная задержка при получении информации из базы данных. В результате получается как-то ущербно. За примером долго ходить не надо:

                myapp.meteor.com/
                  0
                  Значительный лаг будет если работать с базой из другого приложения (там порядка 10 секунд), но если же воспользоваться DDP клиентом — то задержку можно значительно сократить.

                  Под основные платформы (Ruby,.NET,python) уже такой клиент есть
                    0
                    Я считаю, что даже 1-2 секунды, как в указанном примере — достаточно много для веба. Я уже видел парочку российских сайтов, разработанных на метеоре. Их все можно сразу «признать» именно но этой задержке.
                      0
                      Можно ссылку?
                        0
                        Nodejs (https://github.com/oortcloud/node-ddp-client)
                        .NET (https://github.com/sonyarouje/DDPClient.NET)
                        Ruby (https://github.com/tmeasday/ruby-ddp-client)
                        Python (https://github.com/meteor/meteor/tree/master/examples/unfinished/python-ddp-client)

                Only users with full accounts can post comments. Log in, please.