5

我正在开发 Meteor 应用程序(来自 PHP 项目的端口),我需要能够从服务器在我的应用程序上运行命令以执行各种操作,例如清除缓存、聚合数据等。这些命令需要从shell 脚本和 crontab。我见过其他人问这个问题,显然还没有正式的方法可以做到这一点。

我阅读了使用 Meteor 方法的建议,并使用密码从客户端的 JS 控制台调用它们。这并不能解决我从 CLI 运行它们的问题,但它确实给了我一个想法:

是否可以使用无头浏览器(如 PhantomJS)连接到我的应用程序并执行 Meteor.call() 来模拟 CLI 工具,并将参数传递给方法?如果可能的话,有谁知道我如何做到这一点?

谢谢!

4

3 回答 3

5

编辑:更新为使用 Iron Router,Meteor Router 的继任者。

不需要无头浏览器或任何复杂的东西。使用Meteorite安装Iron Router并定义服务器端路由:

Router.map(function () {
  this.route('clearCache', {
    where: 'server',
    action: function () {
      // Your cache-clearing code goes here.
    }
  });
});

然后让您的 cronjob 触发对该 URI 的 HTTP GET 请求:

curl http://yoursite.com/clearCache

当 Meteor 服务器收到 GET 请求时,路由器会执行你的代码。

为了一点点安全,添加一个密码检查:

Router.map(function () {
  this.route('clearCache', {
    path: '/clearCache/:password',
    where: 'server',
    action: function () {
      if (this.params.password == '2d1QZuK3R3a7fe46FX8huj517juvzciem73') {
        // Your cache-clearing code goes here.
      }
    }
  });
});

并让您的 cronjob 将该密码添加到 URI:

curl http://yoursite.com/clearCache/2d1QZuK3R3a7fe46FX8huj517juvzciem73

原帖

不需要无头浏览器或任何复杂的东西。使用Meteorite安装Meteor Router并定义服务器端路由:

Meteor.Router.add('/clearCache', function() {
  // Your cache-clearing code goes here.
});

然后让您的 cronjob 触发对该 URI 的 HTTP GET 请求:

curl http://yoursite.com/clearCache

当 Meteor 服务器收到 GET 请求时,路由器会执行你的代码。

为了一点点安全,添加一个密码检查:

Meteor.Router.add('/clearCache/:password', function(password) {
  if (password == '2d1QZuK3R3a7fe46FX8huj517juvzciem73') {
    // Your cache-clearing code goes here.
  }
});

并让您的 cronjob 将该密码添加到 URI:

curl http://yoursite.com/clearCache/2d1QZuK3R3a7fe46FX8huj517juvzciem73
于 2013-07-06T05:59:48.100 回答
0

看看这个 Meteor 应用程序,它就是这样做的:

http://meteor-shell.meteor.com/

当您可以在服务器上存储一些脚本并从 Meteor 应用程序的管理界面执行它们时,为什么还需要 CLI 工具?

于 2013-07-05T21:06:00.837 回答
0

昨天也有同样的问题。找到了这个包,但还没有尝试过 https://github.com/practicalmeteor/meteor-mcli

概述

一个流星包和命令行工具,用于使用流星创建和运行命令行/cli 程序。

激励

为了能够在您的命令行程序中重用您的流星应用程序的相同代码,而不必创建一个单独的节点/npm 代码库,其中包含从您的流星应用程序复制的大量代码。

于 2016-06-30T12:36:27.890 回答