2017-11-15 33 views
0

私はレールアプリをプロダクションに配備しようとしていますが、エラーが発生しました。私はエラーが発生しましたActiveRecord::StatementInvalid: Mysql2::Error: Illegal parameter data type bigint for operation 'get_lock': SELECT GET_LOCK(2398406209365187035, 0)どのマイグレーションがこれを引き起こしているのかわかりません。 :制限をbigintからintegerに変更するRails 5 DB Migration error

これはステージングでうまく配置されているため、問題の原因はわかりません。次のように

私の移行は、次のとおりです。

class CreateDatabase < ActiveRecord::Migration 
    def change 
    create_table "vuln_sets", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t| 
     t.string "vulntype", null: false 
     t.string "displayname", null: false 
     t.string "bulletinfamily", null: false 
     t.integer "vulncount", default: 0, null: false 
     t.boolean "active", default: false, null: false 
     t.timestamp "timestamp", default: -> { "CURRENT_TIMESTAMP" }, null: false 
     t.index ["vulntype"], name: "vulntypeindex", unique: true 
    end 
    end 
end 

第二の移行:

class DeviseCreateUsers < ActiveRecord::Migration[5.0] 
    def change 
    create_table :users do |t| 
     ## Database authenticatable 
     t.string :email,    null: false, default: "" 
     t.string :encrypted_password, null: false, default: "" 

     ## Recoverable 
     t.string :reset_password_token 
     t.datetime :reset_password_sent_at 

     ## Rememberable 
     t.datetime :remember_created_at 

     ## Trackable 
     t.integer :sign_in_count, default: 0, null: false 
     t.datetime :current_sign_in_at 
     t.datetime :last_sign_in_at 
     t.string :current_sign_in_ip 
     t.string :last_sign_in_ip 

     ## Confirmable 
     # t.string :confirmation_token 
     # t.datetime :confirmed_at 
     # t.datetime :confirmation_sent_at 
     # t.string :unconfirmed_email # Only if using reconfirmable 

     ## Lockable 
     # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 
     # t.string :unlock_token # Only if unlock strategy is :email or :both 
     # t.datetime :locked_at 


     t.timestamps null: false 
    end 

    add_index :users, :email,    unique: true 
    add_index :users, :reset_password_token, unique: true 
    # add_index :users, :confirmation_token, unique: true 
    # add_index :users, :unlock_token,   unique: true 
    end 
end 
+1

これらは、あなたのDB内の2つのだけの移行はありますか? bigIntを持つ他のものはありませんか? – Zubin

+1

実行しようとするコマンドを追加してください。エラーメッセージ全体にスタックトレースが含まれています(スタックトレース全体を取得するには、コマンドに--traceを追加する必要があります)。 – spickermann

+0

移行コードをコメントアウトしてみてください。バイナリ検索デバッグのアプローチ:) –

答えて

0

私は今日、この問題に遭遇しました。

をMariaDB 10.2の場合:MariaDB 10.3で

> select get_lock(1234567890, 0); 
+-------------------------+ 
| get_lock(1234567890, 0) | 
+-------------------------+ 
|      1 | 
+-------------------------+ 

を:get_lockのMySQLの/ MariaDBの実装が変更されているように思える

> select get_lock(1234567890, 0); 
ERROR 4079 (HY000) at line 1: Illegal parameter data type bigint for operation 'get_lock'