2016-08-30 9 views
2

Согласно руководству по миграции синтаксического анализа, мы могли бы использовать что-то вроде Kue и Kue-UI, чтобы эмулировать функциональность запланированных заданий parse.com.Как все собираются выполнять запланированные задания/облачные задания на parse-сервере?

Я не реализовал Kue или Kue-ui, но, глядя на руководства, он не выглядит так, как будто он обеспечивает практически те же функциональные возможности, что и существующие запланированные задания parse.com. Правильно ли это наблюдение? Кто-то реализовал это? Верно ли, что задания должны быть запланированы через Kue в javascript, а Kue-ui предоставляет только сводную информацию о текущем статусе заданий, а новые расписания не могут быть добавлены через Kue-ui?

Неужели кто-то пытался достичь такого же результата с чем-то вроде Дженкинса? Так вот что я имел в виду:

  • Каждое задание все равно будет определено в коде облака. Parse.Cloud.job («job01», function (request, response) {));
  • немного изменить синтаксический анализ, чтобы показать работу с аналогичным URL-адресом существующим облачным функциям, например./Разобрать/работу/job01 (это может существовать в синтаксическом-сервере в ближайшее время: github.com/ParsePlatform/parse-server/pull/2560)
  • создать новую Дженкинс работу сделать завиток на этом URL
  • определить хроны как график, что Дженкинс задания в Дженкинс веб-интерфейс

я могу видеть преимущества являются:

  • практически без кодирования
  • настройка Jenkins звучит как гораздо меньше работы, то настройка КУЭ , redis и kue-ui
  • существующих облака работы/определения оставаться точно так же
  • график и вручную запустить работу через Дженкинс веб-интерфейс

Единственное, что текущие график parse.com работу/облачные рабочие места могут сделать это через Jenkins на основе решения не может выбрать имя задания для создания нового расписания из выпадающего списка.

Я что-то упустил? Как все это происходит? Благодарю.

+0

Я написал статью об этом: https://andreygordeev.com/2016/08/04/parse-background-jobs-on-parse-server.html –

ответ

3

Я закончил это с помощью 'node-schedule'. Не уверен, что это лучший вариант, но он отлично работает для меня.

index.js

var schedule = require('node-schedule'); 
var request = require('request'); 
schedule.scheduleJob('*/15 * * * *', function() { 
    var options = { 
     url: serverUrl + '/functions/{function name}}', 
     headers: { 
      'X-Parse-Application-Id': appID, 
      'X-Parse-Master-Key': masterKey, 
      'Content-Type': 'application/json' 
     } 
    }; 
    request.post(options, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      console.log(body); 
     } 
    }); 
}); 

main.js

Parse.Cloud.define('{function name}', function(req, res) { 
    //Check for master key to prevent users to call this 
    if (req.master === true) { 
    //Do operations here 
    } else { 
    res.error('Need Master Key'); 
    } 
}); 
+0

Привет @ rob180, спасибо за ваши отзывы. – asdf01

0

Я использую kue для этой цели. Я описал appoach in my article.Короче говоря, эта функция:

Parse.Cloud.job("sendReport", function(request, response) { 
    Parse.Cloud.httpRequest({ 
    method: 'POST', 
    headers: { 
    'Content-Type': 'application/json', 
    }, 
    url: "https://example.com/url/", // Webhook url 
    body: "body goes here", 
    success: function(httpResponse) { 
     console.log("Successfully POSTed to the webhook"); 
     }, 
    error: function(httpResponse) { 
     console.error("Couldn't POST to webhook: " + httpResponse); 
     } 
    }); 
}); 

становится этим:

// Create a kue instance and a queue. 
var kue = require('kue-scheduler'); 
var Queue = kue.createQueue(); 
var jobName = "sendReport"; 

// Create a job instance in the queue. 
var job = Queue 
      .createJob(jobName) 
      // Priority can be 'low', 'normal', 'medium', 'high' and 'critical' 
      .priority('normal') 
      // We don't want to keep the job in memory after it's completed. 
      .removeOnComplete(true); 

// Schedule it to run every 60 minutes. Function every(interval, job) accepts interval in either a human-interval String format or a cron String format. 
Queue.every('60 minutes', job); 

// Processing a scheduled job. 
Queue.process(jobName, sendReport); 

// The body of job goes here. 
function sendReport(job, done) { 
    Parse.Cloud.httpRequest({ 
    method: 'POST', 
    headers: { 
    'Content-Type': 'application/json', 
    }, 
    url: "https://example.com/url/", // Webhook url 
    body: "body goes here"}).then(function(httpResponse) { 
    console.log("Successfully POSTed to the webhook"); 
    // Don't forget to run done() when job is done. 
    done(); 
    }, function(httpResponse) { 
    var errorMessage = "Couldn't POST to webhook: " + httpResponse; 
    console.error(errorMessage); 
    // Pass Error object to done() to mark this job as failed. 
    done(new Error(errorMessage)); 
    }); 
} 

Он отлично работает, хотя я заметил, что иногда kue-scheduler запускает событие чаще, чем это необходимо. См. Этот выпуск для получения дополнительной информации: https://github.com/lykmapipo/kue-scheduler/issues/45

+0

Привет @ andrey-gordeev. Спасибо за ваш отзыв. Хотя вы не указали напрямую, но правильно ли я заключаю, что вы не можете планировать работу через какой-то пользовательский интерфейс с любыми комбинациями kue, kue-ui или kue-scheduler? Благодарю. – asdf01

+0

@ asdf01 'kue' имеет отдельный компонент пользовательского интерфейса, но я его не пробовал. –

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

  • Нет связанных вопросов^_^