【问题标题】:Setting up Airbrake on an Ember application在 Ember 应用程序上设置 Airbrake
【发布时间】:2014-01-27 16:11:38
【问题描述】:

您如何设置 Airbrake 以便从 Ember 应用程序中发生的未处理的 Javascript 错误中获取上下文信息?

【问题讨论】:

  • 你是如何设置空气制动的?添加 在我的 head 标签中?
  • 我正在使用 Rails 并使用了他们在此处显示的 Rails 助手 - help.airbrake.io/kb/troubleshooting-2/javascript-notifier 但是,您应该能够通过直接添加他们显示的 JS 来获得相同的结果。
  • 对于 airbrake,我无法使用上述示例方式,但我必须从 github 手动下载 js 文件并将其包含在我的项目中以使其正常工作。
  • 虽然我认为 sentry 可以提供更好的错误报告

标签: javascript ember.js airbrake


【解决方案1】:

假设您已包含 Airbrake-js,您可以挂钩 Ember 的 onerror 处理程序并推送错误。

Ember.onerror = function(err) { // any ember error
    Airbrake.push(err);
    //any other error handling
};
Ember.RSVP.configure('onerror',function(err){ // any promise error
    Airbrake.push(err);
    console.error(e.message);
    console.error(e.stack);
    //any other generic promise error handling
};
window.onerror = function(err){ // window general errors.
    Airbrake.push(err);
    //generic error handling that might not be Airbrake related.
};

您可以在airbrake-js GitHub 存储库文档中查看发送数据的不同参数的更多选项。

【讨论】:

  • 我现在已经与 Ember 团队成员 (Stef) 验证了这一点 - 目前无法同时捕获 RSVP 错误和正常错误。祝你好运!。
  • 谢谢!是的,我正在使用 rails airbrake_javascript_notifier 帮助程序并使用 Ember.onerror 进行初始化,但我基本上会在缩小的 JS 中的某处出现“ReferenceError:找不到变量 e”之类的错误,没有其他信息。以为我会看看是否有我遗漏的东西。很高兴了解 RSVP onerror。
【解决方案2】:

我不知道这是否能回答你的问题,但我希望它有所帮助。

要处理服务器抛出的错误,您可以在应用程序的路由中定义一个“错误”函数并将其推送到 Airbrake:

App.ApplicationRoute = Ember.Route.extend({
  actions: {
    error: function(error) {
      // handle the error
      Airbreak.push(error)
    }
  }
});

此外,如果您在其他地方捕获错误并进行相同的处理,您可以制作一个 mixin 并传递错误:

App.ErrorHandlerMixin = Ember.Mixin.create({
    handleError: function(error){
         //make different stuff
         Airbreak.push(error)
    }      
});

App.ApplicationRoute = Ember.Route.extend(App.ErrorHandlerMixin, {
  actions: {
    error: function(error, transition) {
      this.handleError(error);
    }
  }
});

App.ApplicationController = Ember.ObjectController.extend((App.ErrorHandlerMixin, {
    someFunction: function () {
        this.handleError(randomError);
    }
});

这样您就可以在一个地方处理所有错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多