对于使用Mysql2的rapns gem,迁移失败

时间:2013-06-20 22:13:46

标签: ruby-on-rails ruby apple-push-notifications rails-migrations mysql2

我对rails很新 - 我已经编写了4个月的时间 - 而且我有一段时间将用于Apple推送通知的rapns gem安装到作为后端服务器的Rails应用程序中一个iOS应用程序。

我正在使用ruby 1.9.3p327,rails 3.2.13和rapns 3.3.1。

我从these instructions成功运行了“rails g rapns”,然后当我运行“rake db:migrate”时,当rails尝试运行add_gcm迁移文件时,我收到以下错误:

==  AddGcm: migrating =========================================================
-- add_column(:rapns_notifications, :type, :string, {:null=>true})
   -> 0.0385s
-- add_column(:rapns_apps, :type, :string, {:null=>true})
   -> 0.0247s
-- change_column(:rapns_notifications, :type, :string, {:null=>false})
   -> 0.0456s
-- change_column(:rapns_apps, :type, :string, {:null=>false})
   -> 0.0222s
-- change_column(:rapns_notifications, :device_token, :string, {:null=>true, :limit=>64})
   -> 0.0372s
-- change_column(:rapns_notifications, :expiry, :integer, {:null=>true, :default=>86400})
   -> 0.0319s
-- change_column(:rapns_apps, :environment, :string, {:null=>true})
   -> 0.0213s
-- change_column(:rapns_apps, :certificate, :text)
rake aborted!
An error has occurred, all later migrations canceled:

Mysql2::Error: BLOB/TEXT column 'certificate' can't have a default value: ALTER TABLE `rapns_apps` CHANGE `certificate` `certificate` text DEFAULT '' NOT NULL/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `block in execute'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activesupport-3.2.13/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `execute'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/connection_adapters/mysql2_adapter.rb:211:in `execute'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:480:in `change_column'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:466:in `block in method_missing'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:438:in `block in say_with_time'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:438:in `say_with_time'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:458:in `method_missing'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:334:in `method_missing'
/Users/Greg/Camboo-Server/db/migrate/20130620184555_add_gcm.rb:25:in `up'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:370:in `up'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:410:in `block (2 levels) in migrate'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:410:in `block in migrate'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_pool.rb:129:in `with_connection'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:389:in `migrate'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:528:in `migrate'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:720:in `block (2 levels) in migrate'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:777:in `call'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:777:in `ddl_transaction'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:719:in `block in migrate'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:700:in `each'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:700:in `migrate'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:570:in `up'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/migration.rb:551:in `migrate'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.13/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/task.rb:246:in `call'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/task.rb:246:in `block in execute'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/task.rb:241:in `each'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/task.rb:241:in `execute'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/task.rb:184:in `block in invoke_with_call_chain'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/task.rb:177:in `invoke_with_call_chain'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/task.rb:170:in `invoke'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:143:in `invoke_task'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:101:in `block (2 levels) in top_level'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:101:in `each'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:101:in `block in top_level'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:110:in `run_with_threads'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:95:in `top_level'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:73:in `block in run'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:160:in `standard_exception_handling'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.0.4/lib/rake/application.rb:70:in `run'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/bin/ruby_noexec_wrapper:14:in `eval'
/Users/Greg/.rvm/gems/ruby-1.9.3-p327/bin/ruby_noexec_wrapper:14:in `<main>'

这是我尝试过的:

  • 我从迁移文件的上部和下部删除了“:null =&gt; true”。当我运行“rake db:migrate”时,我收到了这个错误:Mysql2::Error: Duplicate column name 'type': ALTER TABLE rapns_notifications ADD type(如果需要,我可以提供跟踪)。基于此Github issue
  • 一旦有效,我就注释掉了'add_column:rapns_notifications,:type,:string,:null =&gt;真正

    add_column:rapns_apps,:type,:string,:null =&gt;是的,因为两者都给了我“重复列”的错误。松散地基于this SO answer

执行上述步骤后,我获得了成功运行的迁移。我将继续前进,看看我是否可以在没有这些列的情况下安装Rapns,默认为:certificate

任何想法我做错了什么?这是迁移和回滚的问题,我只是不明白?也许是一个我无法解决的Mysql2错误。或完全不同的东西。

我会在继续前进的过程中编辑我的问题。

谢谢你的帮助,SO'ers!你们摇滚。

编辑(6/20 15:44):我试图通过rails控制台创建一个新的Rapns应用,发现add_gcm迁移文件没有完全迁移。在我的模式中,rapns_app仍然具有:key属性,该属性已更改为:在rapns 3.x中命名以支持gcm。所以,没有:名字我不能创建一个apns_app。为什么迁移文件没有正常运行?

编辑(6/24):显然这是一个与rapns有关的错误。与维护者一起解决问题。谢谢你。

0 个答案:

没有答案
相关问题