【发布时间】:2015-11-27 22:56:13
【问题描述】:
我正在尝试在我的 Ruby on rails 项目上应用数据库迁移,该项目定义了引用和外键约束。
迁移本身在开发 Sqlite3 数据库以及使用 Aria 存储引擎的 MariaDB 服务器上运行良好。为了支持外键约束,我们在实时 MariaDB 10 服务器中使用 InnoDB(此处为:XtraDB)存储引擎。
在实时应用迁移时,它会失败并显示以下错误消息。
== 20150831210234 AddStyleToPiece: migrating ==================================
-- add_reference(:nv_pieces, :style, {:index=>true, :foreign_key=>true})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Table storage engine 'InnoDB' does not support the create option 'TRANSACTIONAL=1': ALTER TABLE `nv_pieces` ADD `style_id` int(11)/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `query'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `block in execute'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_adapter.rb:473:in `block in log'
/usr/local/rvm/gems/ruby-2.1.5/gems/activesupport-4.2.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_adapter.rb:467:in `log'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `execute'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/connection_adapters/mysql2_adapter.rb:231:in `execute'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/schema_statements.rb:393:in `add_column'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/schema_statements.rb:663:in `add_reference'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/migration.rb:662:in `block in method_missing'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/migration.rb:631:in `block in say_with_time'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/migration.rb:631:in `say_with_time'
/usr/local/rvm/gems/ruby-2.1.5/gems/activerecord-4.2.4/lib/active_record/migration.rb:651:in `method_missing'
/srv/httpd/rails-app/db/migrate/20150831210234_add_style_to_piece.rb:3:in `change'
我知道 MariaDB 服务器不支持 XtraDB 存储引擎的 TRANSACTIONAL。
这似乎是 mysql2 gem、libmariadbclient 和服务器之间的一致性问题,但我找不到生成语句的位置。
【问题讨论】:
标签: mysql ruby-on-rails ruby foreign-keys mariadb