Articles of manejo de excepciones

¿Cómo lidiar con no saber qué excepciones puede generar un método de biblioteca en Ruby?

Esta es una pregunta un tanto amplia, pero es una que continúo encontrando cuando programo en Ruby. Soy de un fondo en gran parte de C y Java, donde cuando uso una función o método de biblioteca, miro la documentación y veo lo que devuelve en caso de error (generalmente en C) o qué excepciones […]

¿Cómo capturar la clase Errno :: ECONNRESET en “caso cuando”?

Mi aplicación (Ruby 1.9.2) puede generar diferentes excepciones, incluidas las interrupciones de conexión de red. rescue Exception => e , luego hago case/when manejarlos de diferentes maneras, pero varios errores pasan de mi caso a else . rescue Exception => e p e.class case e.class when Errno::ECONNRESET p 1 when Errno::ECONNRESET,Errno::ECONNABORTED,Errno::ETIMEDOUT p 2 else p […]

¿Cómo obtener “Rastreo de aplicación” en lugar de un rastreo detallado hacia arriba en Rails?

En la página de error predeterminada de Rails del entorno de desarrollo, puede ver tres backtraces, 1. Application Trace, 2. Framework Trace y 3. Full Trace. Pero, ¿cómo puedo obtener “Application Trace” en los controladores Rails? Full Trace (exception.backtrace) es demasiado para mí. Ahora estoy haciendo así: exception.backtrace.select {|line| line =~ /myappname/i } ¿Es esta […]

Manejo de excepciones de registro único en un controlador

Tengo un modelo llamado Suscripción que tiene un índice único en los campos [: correo electrónico,: ubicación]. Esto significa que una dirección de correo electrónico puede suscribirse por ubicación. En mi modelo: class Subscription true, :uniqueness => true, :email_format => true, :uniqueness => {:scope => :location} end En mi método de creación. Quiero manejar la […]

cómo manejar el error de duplicado E11000 de mongodb en ruby

¿Hay algún buen ejemplo de manejo de excepciones relacionadas con mongodb en ruby? En este caso tengo: /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/networking.rb:89:in `send_message_with_gle’: 11000: E11000 duplicate key error index: somedb.somecoll.$_id_ dup key: { : “some_id” } (Mongo::OperationFailure) from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:1108:in `block in insert_documents’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:33:in `block in instrument’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:65:in `instrument’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:32:in `instrument’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:1106:in `insert_documents’ from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:375:in `insert’ […]

¿Alternativa a rescatar en Ruby?

Parece que he begin … rescue … end declaraciones begin … rescue … end en todo mi código! Esto no parece ser lo correcto a hacer. ¿Alguien puede sugerir cómo puedo detectar cualquier excepción sin tener que colocar todo dentro de begin … rescue … end ? ¿Alguna forma de simplemente decirle a Ruby que […]

Rescue Timeout :: Error de Redis Gem (Ruby)

Necesito rescatar un Timeout::Error generado desde la biblioteca de Redis pero me estoy encontrando con un problema, rescatar esa clase específica no parece funcionar. begin Redis.new( { :host => “127.0.0.X” } ) rescue Timeout::Error => ex end => Timeout::Error: Timeout::Error from /Users/me/.rvm/gems/ree-1.8.7-2011.03@gowalla/gems/redis-2.2.0/lib/redis/connection/hiredis.rb:23:in `connect’ Cuando bash rescatar a Exception todavía no funciona begin Redis.new( { :host […]

Afirmando que una excepción particular es lanzada en pepino

Guión Estoy escribiendo una biblioteca (no Ruby on Rails) para la que me gustaría tener características muy detalladas de Cucumber. Esto incluye especialmente la descripción de errores / excepciones que se deben lanzar en varios casos. Ejemplo La forma más intuitiva de escribir los pasos de Pepino probablemente sería algo así como When I do […]

¿Cuál es la diferencia entre `raise“ foo ”` y `raise Exception.new (“ foo ”)`?

¿Cuál es la diferencia: técnica, filosófica, conceptual o de otro tipo? raise “foo” y raise Exception.new(“foo”) ?

¿Es SystemExit un tipo especial de excepción?

¿Cómo se comporta SystemExit manera diferente de otras Exception ? Creo que entiendo algunos de los razonamientos acerca de por qué no sería bueno plantear una Excepción adecuada. Por ejemplo, no querrías que sucediera algo extraño como esto: begin exit rescue => e # Silently swallow up the exception and don’t exit end Pero, ¿cómo […]