UPRAVIT:
--
Pomocí ActiveRecord::Base.connections.exec_query()
je, pokud mohu říci HODNĚ lepší přístup jen proto, že vrací pole hashů, jak by se dalo očekávat, což ActiveRecord::Base.connections.execute
ne.
--
Přečtěte si úpravu výše, níže nechávám pro referenci.
I když si uvědomuji, že tato otázka je poměrně stará, a protože zveřejněné odkazy mají 404'd, nedávno jsem měl stejnou chybu.
Podařilo se mi to opravit následujícím způsobem:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
Jakmile vymažete spojení, můžete spouštět jakékoli další dotazy, kde by stejně jako dříve selhal při pokusu o přístup k databázi přes rails nebo jiný uložený proces.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class
--EDIT:
Za zmínku také stojí, že by se nemělo ukládat připojení ActiveRecord do proměnné podle příspěvku leenteho na tomto odkaz
"Neukládejte to do mezipaměti!"
Neukládejte připojení do proměnné, protože se ji může pokusit použít jiné vlákno, když už je zpětně přihlášeno do fondu připojení. Viz:ConnectionPool "
."connection = ActiveRecord::Base.connection #WRONG
threads = (1..100).map do
Thread.new do
begin
10.times do
connection.execute("SELECT SLEEP(1)") # WRONG
ActiveRecord::Base.connection.execute("SELECT SLEEP(1)") # CORRECT
end
puts "success"
rescue => e
puts e.message
end
end
end
threads.each(&:join)