Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
rake aborted! PGError: ERROR: duplicate key value violates unique constraint "buzzids_pkey" : INSERT INTO buzzids ("updated_at", "id", "assigned", "buzzid", "created_at") VALUES('2008-04-23 08:54:35.999810', 63518327, NULL, NULL, '2008-04-23 08:54:35.999810') /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:150:in `log' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:407:in `execute' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:156:in `insert_sql' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:44:in `insert_without_query_dirty' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:19:in `insert' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:390:in `insert' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:2272:in `create_without_callbacks' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/callbacks.rb:226:in `create_without_timestamps' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/timestamp.rb:29:in `create_without_randomized' /home/nonstop/apps/bookerbee/vendor/plugins/acts_as_randomized/init.rb:45:in `create' /home/nonstop/apps/bookerbee/vendor/plugins/acts_as_randomized/init.rb:61:in `retry_on_duplicate_key' /home/nonstop/apps/bookerbee/vendor/plugins/acts_as_randomized/init.rb:43:in `create' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:2238:in `create_or_update_without_callbacks' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/callbacks.rb:213:in `create_or_update' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1972:in `save_without_validation' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/validations.rb:934:in `save_without_transactions' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/transactions.rb:108:in `save' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in `transaction' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/transactions.rb:80:in `transaction' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/transactions.rb:100:in `transaction' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/transactions.rb:108:in `save' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/transactions.rb:120:in `rollback_active_record_state!' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/transactions.rb:108:in `save' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:572:in `create' /home/nonstop/apps/bookerbee/lib/tasks/buzz.rake:153 /home/nonstop/apps/bookerbee/lib/tasks/buzz.rake:152:in `times' /home/nonstop/apps/bookerbee/lib/tasks/buzz.rake:152 /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `call' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:546:in `execute' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `each' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:541:in `execute' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:508:in `invoke_with_call_chain' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in `synchronize' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:501:in `invoke_with_call_chain' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:494:in `invoke' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1931:in `invoke_task' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `top_level' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `each' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1909:in `top_level' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in `standard_exception_handling' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1903:in `top_level' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1881:in `run' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1948:in `standard_exception_handling' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake.rb:1878:in `run' /usr/lib/ruby/gems/1.8/gems/rake-0.8.1/bin/rake:31 /usr/bin/rake:19:in `load' /usr/bin/rake:19 class Buzzid < ActiveRecord::Base acts_as_randomized { 10000000 + rand(10000000-99999999) } end task :mmmids => :environment do 20000.times {|i| Buzzid.create } end module ActiveRecord::Acts module Randomized def self.included(base) base.extend(ClassMethods) end module ClassMethods def acts_as_randomized(&block) cattr_accessor :randomized_proc self.randomized_proc = block class_eval do include ActiveRecord::Acts::Randomized::InstanceMethods alias_method_chain :create, :randomized set_sequence_name nil end end end module InstanceMethods def create_with_randomized return create_without_randomized if id connection.retry_on_duplicate_key do self.id = randomized_proc.call(self) create_without_randomized end end end end end ActiveRecord::Base.send :include, ActiveRecord::Acts::Randomized module ActiveRecord::ConnectionAdapters class PostgreSQLAdapter def retry_on_duplicate_key ActiveRecord::Base.silence do execute %(SAVEPOINT "retry_on_duplicate_key";) end begin yield rescue ActiveRecord::StatementInvalid ActiveRecord::Base.silence do execute %(ROLLBACK TO SAVEPOINT "retry_on_duplicate_key";) end retry if $!.to_s =~ /duplicate key violates unique constraint ".*_pkey"$/ raise ensure ActiveRecord::Base.silence do execute %(RELEASE SAVEPOINT "retry_on_duplicate_key";) end end end end end
This paste will be private.
From the Design Piracy series on my blog: