Meteor 服务器端远程调试

Posted

技术标签:

【中文标题】Meteor 服务器端远程调试【英文标题】:Meteor server side remote debugging 【发布时间】:2015-03-20 19:16:57 【问题描述】:

版本

我在小型 Ubuntu Server 14.04 LTS (HVM)、SSD 卷类型 - ami-3d50120d EC2 实例上使用 Meteor 1.0.3 和节点 0.10.35。

上下文

我知道如何在我的开发机器上进行服务器端调试,只需 $meteor debug 并打开另一个指向它生成的 url 的浏览器——效果很好。

但现在,我的 EC2 实例出现服务器错误,但我没有进入开发阶段。所以我想设置一个远程调试会话服务器端。

另外,我使用 Meteor-up 包 (mup) 部署到 EC2 实例。


编辑

为了围绕我的问题提供更多背景(和上下文),我添加了以下内容:

我要做的是,在我的 EC2 实例上,在以下位置创建一个新的 pdf:

应用程序名称/服务器/.files/用户/用户名称/pdf-file.pdf

在我的 OSX 开发机器上,该过程运行良好。

当我部署到 EC2 并尝试此过程时,它不起作用。目录:

/用户名/

因为某些原因永远不会创建用户。

我想进行调试以找出我无法创建目录的原因。

创建适用于我的开发框的目录的代码如下:

server.js

Meteor.methods(
  checkUserFileDir: function () 
    var fs = Npm.require('fs');
    var dir = process.env.PWD + '/server/.files/users/' + this.userId + '/';
    try 
      fs.mkdirSync(dir);
     catch (e) 
      if (e.code != 'EEXIST') throw e;
    
  
);

我通过 ssh 进入 EC2 实例以确保路径

/server/.files/user/

存在,因为这部分路径是上述代码正常工作所必需的。我检查了代码应该运行后的路径,并且

/用户名/

部分路径正在创建。


问题

如何在我的 EC2 实例上轻松调试 remote 服务器端代码,就像在本地开发盒上一样?

【问题讨论】:

调试生产实例有点困难,在生产模式下,大部分有用的调试内容都被删除以优化速度。您可以在调试模式下运行,但我不确定您是否想要这个? Mup 默认使用生产模式,因此使用现有设置可能很难做到这一点。不过,您可以使用mup logs 获取基本日志。这是您的 EC2 实例上正在生产的应用程序吗? 我可以用这个特定的 EC2 实例做我喜欢的事情,所以是的,我可以在调试模式下进行部署。 Mup 就是我部署到该实例的方式,但该错误与我的 mup 部署无关。调用服务器端 Meteor 方法时出现错误。所以我想我需要知道如何使用 mup 在调试模式下进行部署,以及如何在 EC2 实例上运行时将调试器附加到服务器端。 @Akshat,我刚刚更新了问题(在编辑标题下),以提供更多关于“为什么”我需要调试 EC2 实例的上下文。非常感谢您的帮助。 在我的情况下,由于我使用的是 Meteor-up (mup),我无法逐个调试,但可以通过使用命令 $ 访问远程 EC2 实例服务器控制台和错误mup 日志 -f。这有效地解决了我在服务器端远程实例上失明的问题。时间到了我会把这个作为答案发布。 【参考方案1】:

对于仍在搜索的人:

@zodern 将流星应用程序的服务器端调试添加到出色的流星启动工具中: https://github.com/zodern/meteor-up/pull/976

在部署目录中执行mup meteor debug,您将几乎设置好,只需按照文本进行即可。

【讨论】:

【参考方案2】:

似乎在我的情况下,因为我使用的是 Meteor-up (mup),所以我无法逐个调试,但可以通过使用命令 $ mup logs -f on 访问远程 EC2 实例服务器控制台和错误我的开发箱。

这有效地解决了我在服务器端远程实例上失明的问题。

它仍然无法进行实际的远程调试,从而加快了查找错误和性能瓶颈的过程,但我们目前只有这些。

【讨论】:

现在我们有mup meteor debug【参考方案3】:

Kadira.io 支持远程错误/异常跟踪。它允许您在流星方法的上下文中查看服务器端异常的堆栈跟踪。

更多详情请参阅https://kadira.io/error-tracking.html

【讨论】:

在您发布帖子后,我与 Kadira.io 的制造商进行了交谈,他指出我可以使用命令 $ mup logs -f 来获得服务器端的可见性。非常感谢@Manto!

以上是关于Meteor 服务器端远程调试的主要内容,如果未能解决你的问题,请参考以下文章

Meteor:在服务器端调试

idea远程调试

Eclipse远程调试

Idea IntelliJ远程调试教程

IDEA远程调试

PyCharm 远程调试代码