为Meteor应用程序创建自定义CLI工具

时间:2013-07-05 19:47:18

标签: meteor command-line-interface

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

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

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

谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

查看这个Meteor应用程序,它确实如此:

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

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

答案 2 :(得分:0)

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

  

<强>概述

     

用于创建和运行的meteor包和命令行工具   命令行/ cli程序与meteor。

     

<强>激励

     

能够在命令中重复使用meteor应用程序的相同代码   行程序,而不必创建单独的节点/ npm代码   从你的流星应用程序中复制了很多代码。