`
机器人
  • 浏览: 85061 次
  • 性别: Icon_minigender_2
  • 来自: Google
社区版块
存档分类
最新评论

rails-exception_notification插件的问题

阅读更多
传送门:
http://railsforum.com/viewtopic.php?id=35270

怎么解决这个问题呢?有什么好办法吗?

怎么异步,怎么新线程?怎么样不阻塞其它的request?怎么样就不会搞死我的web server?

当然首先我认为这是当初设计时引起的问题,但是现在除了不重构代码,怎么hack这个plugin来解决这个问题呢?

================分割线=============================
根据下一站火星的看法,我决定不去考虑异步发信操作,新开ruby线程什么的。还是问题简单化。我决定不使用这个rails-exception_notification插件的发信操作了,我自己将500中的信息保存到数据库,然后再通过email定时来发送500邮件了。

小小的一点点hack这个异常处理的方法
    def rescue_action_in_public(exception)
      case exception
        when *self.class.exceptions_to_treat_as_404
          render_404

        else          
          render_500

          deliverer = self.class.exception_data
          data = case deliverer
            when nil then {}
            when Symbol then send(deliverer)
            when Proc then deliverer.call(self)
          end

          #ExceptionNotifier.deliver_exception_notification(exception, self,
            request, data)
          # TODO:这样做
          # SystemLog.create(".............................")
      end
    end

分享到:
评论
10 楼 机器人 2009-11-03  
Hooopo 写道
你看看log是如何异步的...

不搞什么异步了,我简化化问题。分割线。
9 楼 Hooopo 2009-11-03  
你看看log是如何异步的...
8 楼 机器人 2009-11-03  
Hooopo 写道
哦....你不说清楚我怎么知道你说的设计问题是什么问题。。。

你不要管什么问题好好不好嘛,你就看一下怎么异步一下这个发信的操作,不让currrent request wait:

    def rescue_action_in_public(exception)
      case exception
        when *self.class.exceptions_to_treat_as_404
          render_404

        else          
          render_500

          deliverer = self.class.exception_data
          data = case deliverer
            when nil then {}
            when Symbol then send(deliverer)
            when Proc then deliverer.call(self)
          end

          ExceptionNotifier.deliver_exception_notification(exception, self,
            request, data)
      end
    end
7 楼 Hooopo 2009-11-03  
哦....你不说清楚我怎么知道你说的设计问题是什么问题。。。
6 楼 Hooopo 2009-11-03  
>> u.delete_message((1000..1050).to_a)
  Message Update (16.0ms)   UPDATE `messages` SET status ='DELETED' WHERE ((from_id =98 OR to_id =98) AND id in(1000, 1001, 1002, 1003, 1004, 1005, 100
6, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034,
 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050)) 
=> 0

只有一条语句。。出错也是一个异常
5 楼 机器人 2009-11-03  
Hooopo 写道
引用
In my rails app,sometimes,user select all checkbox in a form,maybe 50+ record. in controller,if a 500 error happened.There will be 50+ times to send email. Bug sending email take some seconds. The exception_notification plugin will send email 50+ times


这个问题?一般不会产生50+个异常吧?比如删除多个checkbox:


我都说明了这是当前初设计 引起的问题。我现在只能一步一步的重构。
4 楼 Hooopo 2009-11-03  
引用
In my rails app,sometimes,user select all checkbox in a form,maybe 50+ record. in controller,if a 500 error happened.There will be 50+ times to send email. Bug sending email take some seconds. The exception_notification plugin will send email 50+ times


这个问题?一般不会产生50+个异常吧?比如删除多个checkbox:
class User < ActiveRecord::Base
def delete_message(ids)
    Message.update_all(
      "status ='#{Message::STATUS_DELETED}'",
      "(from_id =#{self.id} OR to_id =#{self.id}) AND id in(#{ids.join(", ")})"
    )
  end
end

class MessageController < ApplicationController
def delete
    if current_user.delete_message(params[:delete_ids])
      flash[:notice] = "删除成功!"
      redirect_to request.referer
    end
  end
end

3 楼 机器人 2009-11-03  
Hooopo 写道
哈哈哈。。偶邪恶的路过

Hooopo兄弟,你有什么见解?
2 楼 Hooopo 2009-11-03  
哈哈哈。。偶邪恶的路过
1 楼 机器人 2009-11-03  

相关推荐

    rails-master_TheWeb_rubyrails_

    Rails is a web-application framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern.

    awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版.zip

    在这个压缩包中,`awesome-rails-gem-zh_CN-master`可能是项目源码或文档的主目录。以下是一些可能包含在列表中的关键Rails Gem及其功能简介: 1. **Devise**:这是一个灵活的身份认证解决方案,提供了一套完整的...

    exception_notification-shoryuken:Shoryuken http的Rails异常通知程序插件

    ExceptionNotification :: Shoryuken 这个Ruby宝石是宝石的扩展,并提供了一组通知器,用于在 worker中发生错误时发送通知。 如果将Shoryuken worker用作异步进程,这将很有用。 安装 将此行添加到您的应用程序的...

    breadcrumbs_on_rails-json_ld:Rails面包屑的JSON-LD插件

    BreadcrumbsOnRails :: JsonLd BreadcrumbsOnRails :: JsonLd提供了自定义生成器 。用法将builder: ...安装将此行添加到应用程序的Gemfile中: gem 'breadcrumbs_on_rails-json_ld' 然后执行: $ bundl

    2-Rails-sample_app

    标题中的"2-Rails-sample_app"表明这是一个关于Ruby on Rails框架的示例应用程序。Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化开发过程...

    inspinia admin - v2.5 Rails_Full_Version

    10. **Rails安全**:了解CSRF(跨站请求伪造)、XSS(跨站脚本攻击)等安全问题,以及Rails提供的防范措施。 11. **Rspec或Minitest**:使用测试驱动开发(TDD)工具,如Rspec或Minitest,确保代码的质量和可靠性。...

    Api-api_on_rails.zip

    Api-api_on_rails.zip,学习使用rubyonrails5/6构建api的最佳实践学习使用rubyonrails5/6构建api的最佳实践。本书的目的不仅仅是教你如何用rails构建api。目的还在于教您如何用rails构建可伸缩和可维护的api,这意味...

    rails-docker_bulletin-board

    自述文件该自述文件通常会记录启动和运行应用程序... 您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...rails-docker_bulletin-板

    agile-web-development-with-rails_2

    - **模块化改进:** 支持插件系统,允许开发者轻松扩展和定制Rails的功能。 - **社区贡献:** Rails 2更加注重社区的反馈和贡献,这使得框架能够更快地响应用户需求并修复问题。 #### 五、实战案例分析 本书通过...

    activerecord-session_store, 从 Rails 中提取的记录存储的活动会话.zip

    activerecord-session_store, 从 Rails 中提取的记录存储的活动会话 Active Record 会话存储由 Active Record 类支持的会话存储。 提供了默认类,但是任何对 Active Record 会话类的对象鸭类型都有文本 session_id ...

    Ajax-select_all-rails.zip

    Ajax-select_all-rails.zip,易于选择和取消选择所有复选框,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的...

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器.zip

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...

    inspinia admin - v2.5 Rails_Seed_Project

    4. **集成的Gem包**:Rails_Seed_Project整合了如Devise(用户认证)、CanCanCan(权限控制)等常用Rails插件,帮助开发者实现复杂的功能模块。 5. **脚手架生成器**:项目可能还包括了一些脚手架(Scaffold)生成...

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板.zip

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...

    Rails-JS-Project_TrainingSessions

    "Rails-JS-Project_TrainingSessions" 是一个关于使用Ruby on Rails框架与JavaScript技术进行项目开发的训练课程。这个训练课程可能包含了一系列的教程、代码示例和练习,旨在帮助开发者提升在Rails环境下构建交互式...

    rails-session_cookie:一个用于获取原始Rails会话Cookie的机架应用

    Rails :: SessionCookie 快速,松散耦合的请求有关经过Cookie验证的应用程序的规范。 为什么 可能,您可能已经看到了很多像这样的代码: # config/initializers/session_store.rb Rails . application . config . ...

    omniauth-rails_csrf_protection:在Rails应用程序的OmniAuth请求端点上提供CSRF保护

    OmniAuth-Rails CSRF保护该gem通过实现直接使用Rails的ActionController::RequestForgeryProtection代码的CSRF令牌验证程序,缓解了 (在将OmniAuth gem与Ruby on Rails应用程序结合使用时在请求阶段进行跨站点请求...

    Ruby-on-Rails-rails.zip

    Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_...

    InspiniaAdmin 2.6.1 Rails_Full_Version

    《InspiniaAdmin 2.6.1 Rails Full Version 深度解析》 InspiniaAdmin 2.6.1 Rails Full Version 是一个专为Web应用开发设计的全面的后台管理框架,它基于Ruby on Rails框架,为开发者提供了一整套强大的功能,帮助...

    rails-settings-ui:用于在Rails应用程序中管理设置的用户界面(使用rails-settings gem)ИнтерфейсдляуправлениянастройкамивRailsприложении

    预习: 实时示例: : 如何添加到Gemfile gem 'rails-settings-ui'然后加gem 'rails-settings-cached'要么gem 'rails-settings'或您的扶手设置。 如果要使用引导程序界面,则还需要在应用程序中包含引导程序样式表...

Global site tag (gtag.js) - Google Analytics