heroku run rake db:migrate дает rake aborted

Я новичок в ruby ​​on rails, github и heroku. Теперь я делаю проект с фиксированным депозитом в этом проекте, я использую базу данных sqlite3 на моем локальном хосте и postgres в героку.

Я добавил поле int с типом данных string и изменил тип данных с string на integer. Наконец, я решил снова изменить его с integer на float. На моем локальном хосте он работает отлично. Но когда я пытаюсь запустить героку, он показывает, что рейк прерван.

heroku run rake db:migrate

он показывает следующее сообщение об ошибке

Running `rake db:migrate` attached to terminal... up, run.4356

Connecting to database specified by DATABASE_URL

Migrating to CreateFds (20140505120047)

Migrating to Changedatatypeforfd (20140506065307)


Migrating to AddMdToFds (20140506080333)

Migrating to AddIntToFds (20140506080404)

Migrating to Changedatatypeforint (20140506103001)

==  Changedatatypeforint: migrating ======================

-- change_column(:fds, :int, :integer)

rake aborted!

StandardError: An error has occurred, this and all later migrations canceled:

PGError: ERROR:  column "int" cannot be cast automatically to type integer

HINT:  Specify a USING expression to perform the conversion.
: ALTER TABLE "fds" ALTER COLUMN "int" TYPE integer

мои файлы БД перечислены ниже

20140506080404_add_int_to_fds.rb

class AddIntToFds < ActiveRecord::Migration

  def change

    add_column :fds, :int, :string
  end

end

20140506103001_changedatatypeforint.rb

class Changedatatypeforint < ActiveRecord::Migration

 def up

    change_column :fds, :int, :integer

  end


  def down

    change_column :fds, :int, :string


  end

end

20140508105541_rechangedatatypeforint.rb

class Rechangedatatypeforint < ActiveRecord::Migration


  def up

    change_column :fds, :int, :float

  end


  def down

    change_column :fds, :int, :integer

  end

end

Извините за мою оплошность. Пожалуйста, дайте мне решение. Заранее спасибо.


person Yogesh    schedule 21.05.2014    source источник
comment
Миграция прервана, так как int рассматривается как сохраненное имя.   -  person Bharat soni    schedule 21.05.2014
comment
Бхарат Сони: Как решить эту проблему?   -  person Yogesh    schedule 21.05.2014


Ответы (1)


Heroku использует PostgreSQL. В PostgreSQL int является зарезервированным словом, его нельзя использовать в качестве имени столбца. Используйте что-нибудь другое для своего int имени

change_column :fds, :valid_name, :integer

Ключевые слова SQL

Если вы хотите преобразовать число с плавающей запятой в целое число, один из способов сделать это:

class MigrationNameHere < ActiveRecord::Migration
  def up
    execute('ALTER TABLE fds ALTER COLUMN column_name TYPE integer USING round(column_name);')
  end
end

Эта миграция преобразует все ваши числа с плавающей запятой в целые, и она необратима, поэтому будьте осторожны. Я советую вам сделать резервную копию, прежде чем делать это.

person cristian    schedule 21.05.2014
comment
Осьминог-Пол: Спасибо, сэр. - person Yogesh; 21.05.2014
comment
Octopus-Paul: Я хочу, чтобы он был плавающим. для этого change_column:fds,interest,:float. это правильно?. - person Yogesh; 21.05.2014
comment
Все хорошо. Прочтите о миграции api.rubyonrails.org/classes/ActiveRecord/Migration.html. - person cristian; 21.05.2014
comment
Octopus-Paul: Спасибо за ваше руководство. - person Yogesh; 21.05.2014
comment
Успешно ли выполняются ваши миграции на Heroku? - person cristian; 21.05.2014
comment
Нет, все еще я сталкиваюсь с этой проблемой... :( - person Yogesh; 21.05.2014
comment
Я обновил ответ. Попробуй сейчас. Сделайте резервную копию, если у вас есть данные в этой таблице. - person cristian; 21.05.2014
comment
Окопус-Пол: Сэр, я пойду другим путем. Я удалил ненужные файлы миграции из git, теперь мое приложение успешно работает в героку. большое спасибо за вашу поддержку - person Yogesh; 22.05.2014