Closed bkeepers closed 10 months ago
The issue is with this index:
add_index :flipper_gates, [:feature_key, :key, :value], unique: true
Now that value
is a text column, MySQL want's a prefix size that should be used in the index, per these docs
And here are the Rails docs for #add_index with prefix size:
Creating an index with specific key lengths for multiple keys
add_index(:accounts, [:name, :surname], name: 'by_name_surname', length: {name: 10, surname: 15})
@bkeepers thank you for looking into that!
below migration fixed the issue
class ChangeFlipperGatesValueToText < ActiveRecord::Migration[7.1]
def up
remove_index :flipper_gates, %i[feature_key key value]
change_column :flipper_gates, :value, :text
add_index :flipper_gates, [:feature_key, :key, :value], unique: true, length: {feature_key: 50, key: 50, value: 50}
end
def down
change_column :flipper_gates, :value, :string
end
end
I'm not any mysql expert, its just an experimentation
@gs-deliverists-io Thanks, I was just experimenting with the same thing.
I just ran the flipper-active_record test suite against mysql after making the change below and everything passes.
@fer9305 @BrandonHicks-msr @gs-deliverists-io can you all test this out and confirm that it works for you as well?
class ChangeFlipperGatesValueToText < ActiveRecord::Migration[7.1]
def up
remove_index :flipper_gates, [:feature_key, :key, :value], unique: true
change_column :flipper_gates, :value, :text
add_index :flipper_gates, [:feature_key, :key, :value], unique: true, length: { value: 255 }
end
def down
change_column :flipper_gates, :value, :string
end
end
@bkeepers
The latest snippet you provided above worked for me. The only issue I had was related to the index (and maybe related to something I was previously missing). But changing it to the following resolved it:
remove_index(:flipper_gates, [:feature_key, :key, :value], unique: true) if index_exists?(:flipper_gates, [:feature_key, :key, :value], unique: true)
@bkeepers it works for me!
Thank you @bkeepers ! Lovely work. Works fine now.
❤️
Originally raised in https://github.com/flippercloud/flipper/issues/557#issuecomment-1849946093:
Reproducable with mysql2 and trilogy adapters on Mysql 8.2.0
cc @fer9305 @BrandonHicks-msr @gs-deliverists-io