Tag: exception处理

渲染无法在rescue_from ActiveRecord :: Rollback方法中呈现正确的模板

我正在为电子商务网站构建结帐页面,我有一个相当长的事务,它创建了一个新的用户模型和一个新的订单模型。 我将这些模型的创建包装在一个事务中,这样如果一个模型的validation失败,另一个不会在数据库中闲逛。 这是我的OrdersController中的修剪代码: rescue_from ActiveRecord::Rollback, with: :render_new def render_new render action: ‘new’ end ActiveRecord::Base.transaction do @user = User.new params[:user] unless @user.save raise ActiveRecord::Rollback end //More stuff … @order = Order.new params[:order] … unless @order.save raise ActiveRecord::Rollback end end 我看到的错误是这样的: 缺少模板订单/创建,应用/创建{:locale => [:en],:formats => [:html],:handlers => [:erb,:builder,:coffee]} 我很困惑为什么它试图渲染模板命令/创建和应用程序/创建而不是渲染订单/新。 有没有更好的方法来强制事务失败,以便发生回滚?

可以在Rails控制器中呈现和引发exception吗?

我现在已经和它斗争了好几个小时了。 我有一个控制器动作,我想渲染一个页面,然后自动引发一个exception。 我找不到太多关于此的信息让我觉得我在寻找错误的东西。 类似下面的东西可能吗? class UsersController e render ’email_error’ raise(e) end # .. other stuff end end 在这种情况下,我只想告知最终用户错误,然后在应用程序本身上引发exception。 请注意,我无法更改事实上的错误页面,因为这是一个较小的应用程序,在相同的代码库中具有更大的应用程序。

如何在Rails中获取“应用程序跟踪”而不是完整的详细回溯?

在开发环境的Rails默认错误页面中,您可以查看三个回溯,1。应用程序跟踪,2。框架跟踪和3.完整跟踪。 但是如何在Rails控制器中获得“应用程序跟踪”。 完全跟踪(exception.backtrace)对我来说太过分了。 现在我这样做: exception.backtrace.select {|line| line =~ /myappname/i } 这是正确的方法吗? 还是有其他更酷的方法来获得它?

如何在Ruby on Rails应用程序中拯救OAuth :: Unauthorizedexception?

如何从Ruby on Rails应用程序中从OmniAuth引发的OAuth :: Unauthorizedexception中解救出来? 显然这个: rescue_from OAuth::Unauthorized, :with => :unauthorized 将无法正常工作,因为它只捕获Rails中抛出的exception,并且此exception会被抛出到机架链中的其他位置。 在这个应用程序中,管理员(而不是我们,开发人员)为twitter和facebook配置凭据,因此有错误的可能会发生并确实发生。 当发生这种情况时,我想表明一个更好的信息“出事了”。 更新 :我还询问了omniauth谷歌小组 ,到目前为止还没有答案,但如果你正在阅读这个问题,你可能想看看它。

Hoptoad诉Exceptional诉exception_notification诉exception_logger案

以下哪种exception通知解决方案最好? 优秀 黾 exception_notification exception_logger

如何救援exception中心和DRY?

我有一个例外,在约20个单独的地方产生。 它可以在每个地方轻松地以相同的方式获救,但这不是干燥和放弃治疗工作! 我想在中心位置拯救这个例外。 我怎么安排这个? 它顺便说一下ActiveRecord::RecordNonUniqueexception,……

当用户打开多个窗口时,使用Devise在Rails中捕获401错误

场景是这样的:用户有2个窗口,他/她登录。他/她从一个登录,保持登录到另一个,然后在后者,触发一些动作,比如表单提交。 最初,发生的是它抛出了无效的真实性令牌错误。 我已经将protect_from_forgery中的protect_from_forgery更新为protect_from_forgery with: :null_session这样它就会抛出401而不是Exception。 大! 现在对于第2步,而不是用户只是看到一行文字说You need to sign in or sign up before continuing. ,我想将他/她重定向到登录页面。 这就是我遇到问题的地方……我一直在阅读本指南: http : //agileleague.com/blog/rails-3-2-custom-error-pages-the-exceptions_app-and-testing-with -capybara /表示401错误不是默认由rails捕获的。 该指南有两行代码,用于定义和捕获它,然后路由中的一行代码将使路由工作。 基本上它看起来像这样: # add to app/controllers/application_controller.rb class UnauthorizedException :unauthorized) # add to routes (in my case this is what I’ve done for Devise) devise_scope :user do match ‘/401’, to: ‘users/sessions#new’, type: “401”, […]

处理控制器中的唯一记录exception

我有一个名为Subscription的模型,它在字段[:email,:location]上有唯一索引。 这意味着每个位置可以订阅一个电子邮件地址。 在我的模型中: class Subscription true, :uniqueness => true, :email_format => true, :uniqueness => {:scope => :location} end 在我的创建方法中。 我想以不同于常规错误的方式处理exceptionActiveRecord::RecordNotUnique 。 我如何将其添加到此通用创建方法中? def create @subscription = Subscription.new(params[:subscription]) respond_to do |format| if @subscription.save format.html { redirect_to(root_url, :notice => ‘Subscription was successfully created.’) } else format.html { render :action => ‘new’ } end end end

rake任务中的Railsexception通知程序

我有一个简单的rails应用程序,带有一些控制器和一些rake任务。 由gem配置的cron执行几个任务。 我的任务之一是每天执行,有时会引发exception,默认情况下我会收到cron的警告 rake aborted! undefined method `parameterize’ for nil:NilClass Tasks: TOP => mailboxes:clean_processed (See full trace by running task with –trace) 我想调试正在发生的事情,因此我刚刚在我的Gemfile使用此行安装了此exception通知 gem gem “exception_notification”, “~> 2.4.1”, :require => ‘exception_notifier’ 并在我的application.rb文件中配置它 # enable exception notification config.middleware.use ExceptionNotifier, :email_prefix => “[MyAppName] “, :sender_address => %{“notifier” }, :exception_recipients => %w{me@example.com} 由于这个gem是一个机架中间件,它只适用于Web请求而不适用于rake任务。 我也想为rake任务启用它,我找到了这个工作的要点 。 它工作,但它不是DRY,我需要在该方法中重复gem配置,我还需要更改所有我的rake任务,将它们的语句括在一个块中,如同 exception_notify { […]

从自定义exception类中获取“消息”

这个问题在这里提到答案 。 我需要访问自定义exception的message 。 这可能吗? 我认为直接调用message就足够了,如下例所示: class MyCustomError < StandardError attr_reader :object def initialize(object) @object = object puts message end end 但这不是我的预期。 它给了我一些字符串: “MyModuleNameHere::MyCustomExceptionClassNameHere” 代替: “a message” 我的直觉倾向于否,因为initialize构造函数不接受”a message”文本。