Problem polega na tym, że adapter bazy danych Rails Mysql2 dławi się, gdy w tym samym bloku wykonania występuje wiele poleceń SQL. Następujące czynności będą działać poprawnie:
execute <<-SQL
ALTER TABLE properties
ADD name VARCHAR(255) NOT NULL;
SQL
execute <<-SQL
ALTER TABLE properties
ADD CONSTRAINT fk_properties_name
FOREIGN KEY (name)
REFERENCES valid_property_names (property_name);
SQL
To zachowanie może cię zmylić, jeśli używasz PostgreSQL z Railsami, ponieważ adapter Postgres nie ma tych samych ograniczeń.