Index name is too long + Postgres + Rails 5

Cześć,
jestem w trakcie upgrad-u z Rails 4.2 do 5.1 i podczas deploy-u ( capistrano ) i wykonywania komendy rake db:migrate wywala błąd :
Index name index_old_passwords_on_password_archivable_type_and_password_archivable_id on table old_passwords is too long.
W pliku migracji mam podane :
add_index(:old_passwords, column: [:password_archivable_type, :password_archivable_id], name: 'idx_password_archivable'), jak by w ogóle name: nie brało pod uwagi.

Dlaczego ?

hmm… klucz column: nie ma czegoś takiego w dokumentacji

spróbuj:

def up
  unless index_name_exists?(:old_passwords, 'idx_password_archivable')
    add_index :old_passwords, [:password_archivable_type, :password_archivable_id], name: 'idx_password_archivable'
  end
end

def down
  if index_name_exists?(:old_passwords, 'idx_password_archivable')
    remove_index :old_passwords, name: 'idx_password_archivable'
  end
end

niestety nic to nie zmieniło.

która wersja gema pg, rubiego ?

możesz wstawić całą treść pliku migracji? czy masz w definicji klasy [5.1] jak niżej

class IndexOldPasswords < ActiveRecord::Migration[5.1]
  ...

https://pastebin.com/Ca9ixrHN
ruby 2.4.2
pg 0.20.0

references + polymorphic domyślnie tworzy index musisz podać tylko nazwę szczegóły

zamiast moich wpisów możesz zrobić jednolinijkowca - nie testowałem

[...]
t.references :password_archivable, polymorphic: true, index: {name: 'idx_password_archivable'}
[...]

teraz działa :slight_smile: Dzięki bardzo.