如何在本地运行 Parse 后台作业
Posted
技术标签:
【中文标题】如何在本地运行 Parse 后台作业【英文标题】:How to run a Parse background job locally 【发布时间】:2015-12-04 22:22:31 【问题描述】:我正在尝试在本地而不是 Parse 云中运行 Parse 后台作业。我需要 Node SDK,因为浏览器 SDK 不支持使用此作业所需的主密钥。
这是我为了在本地运行作业而尝试过的:
var Parse = require('parse-cloud-express').Parse;
Parse.Cloud.job("myBackgroundJob", function(request, status)
status.success("Hello world!");
);
我有 2 个问题:
-
我不知道如何实际运行该作业。我认为
Parse.Cloud.job
调用只会注册它。而且我可能需要以某种方式初始化 SDK(使用 API 密钥),但我不知道如何。
当我运行此代码时,它会输出 Running jobs is not supported in parse-cloud-express
,这让我相信我可能无法让它以这种方式工作。
【问题讨论】:
【参考方案1】:事实证明这比我想象的要容易得多。我仍然会发布我的解决方案,以防它对某人有所帮助。
为了使其工作,您需要在 myBackgroundJobFile.js
文件中注册一个名为 myBackgroundJob
的作业。您还需要一个包含作业参数的params.json
文件。
我使用eval()
而不是require
,因为它允许我按原样使用文件(这意味着该文件也可以在 Parse 上使用而无需修改)。
var fs = require('fs');
var Parse = require('parse/node').Parse;
var BackgroundJobs =
var JobRequest = function (params)
this.params = params;
;
var JobStatus = function () ;
JobStatus.prototype.error = function () ;
JobStatus.prototype.message = function () ;
JobStatus.prototype.success = function () ;
Parse.Cloud.job = function (jobName, jobCall)
BackgroundJobs[jobName] = jobCall;
;
function callBackgroundJob(jobName, params)
var jobCall = BackgroundJobs[jobName];
if (!jobCall)
console.error("There is no registered background job named `" + jobName + "`.");
return Parse.Promise.error();
else
var request = new JobRequest(params);
var status = new JobStatus();
return jobCall(request, status);
eval(fs.readFileSync('myBackgroundJobFile.js').toString());
Parse._initialize("APPLICATION_ID", "javascript_KEY", "MASTER_KEY");
Parse.Cloud.useMasterKey();
var params = JSON.parse(fs.readFileSync('params.json', 'utf8'));
callBackgroundJob("myBackgroundJob", params);
【讨论】:
我很好奇,这种方法是否也适用于新的解析服务器架构?以上是关于如何在本地运行 Parse 后台作业的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Parse Cloud Code 更新对象的属性?
如何确保 Sidekiq 后台作业针对它们启动的同一数据库运行