BEGIN y END son palabras reservadas en Oracle y SQL Server, pero no estoy seguro de por qué MySQL no los considera como tales .
Sin embargo, ese PGError parecería indicar que el motor de la base de datos en sí (y no cualquier tiempo de ejecución relacionado con Ruby) ha rechazado la consulta debido al "fin".
Las palabras reservadas (y los nombres que contienen espacios) se pueden usar si se citan; quizás Active Record no citó los identificadores en el SQL que se generó.
Miraría el registro en MySQL (http://dev.mysql.com/doc/refman/5.5/en/query-log.html) y vería las declaraciones generadas.
Y dado que PGError significa PostGreSQL y mencionó Heroku (PostgreSQL 8.3), creo que esto se debe a que END es una palabra reservada en PostgreSQL:http://www.postgresql.org/docs/8.3/static/sql-keywords-appendix.html
http://www.petefreitag.com/tools/sql_reserved_words_checker/?word=end