質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

1834閲覧

Herokuにデプロイした後にdb:migrateでエラー発生

maeshu

総合スコア1

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/08/31 09:26

編集2020/08/31 12:31

実現したいこと

開発環境で発生しているエラーを解決して本番環境(heroku)に反映させたい

エラーが出ておこなったこと

herokuにデプロイした後に投稿アプリの動作を試したところ、投稿の削除機能のところでエラーが出ました。
'heroku logs'で調べたところ、以前に間違えて作ってしまったマイグレーションの'image_id'が原因だと思ったため、'rails g migration RemoveNameFromTweets image_id:string'を行いました。そして'rails db:migrate'、'heroku run rake db:migrate'を行いました。

###発生したエラー・ターミナル
投稿を削除しようとした時

2020-08-29T16:07:23.618829+00:00 app[web.1]: [d54d13b6-d44c-45d0-977e-874c9fc672ca] Tweet Destroy (4.9ms) DELETE FROM `tweets` WHERE `tweets`.`id` = 11 2020-08-29T16:07:23.623514+00:00 app[web.1]: [d54d13b6-d44c-45d0-977e-874c9fc672ca] (4.5ms) ROLLBACK 2020-08-29T16:07:23.629723+00:00 app[web.1]: [d54d13b6-d44c-45d0-977e-874c9fc672ca] Completed 500 Internal Server Error in 33ms (ActiveRecord: 20.7ms | Allocations: 2836) 2020-08-29T16:07:23.630340+00:00 app[web.1]: [d54d13b6-d44c-45d0-977e-874c9fc672ca] 2020-08-29T16:07:23.630340+00:00 app[web.1]: [d54d13b6-d44c-45d0-977e-874c9fc672ca] NoMethodError (undefined method `image_id' for #<Tweet:0x00005654eecd6038> 2020-08-29T16:07:23.630341+00:00 app[web.1]: Did you mean? image): 2020-08-29T16:07:23.630341+00:00 app[web.1]: [d54d13b6-d44c-45d0-977e-874c9fc672ca] 2020-08-29T16:07:23.630342+00:00 app[web.1]: [d54d13b6-d44c-45d0-977e-874c9fc672ca] app/controllers/tweets_controller.rb:44:in `destroy' 2020-08-29T16:07:23.631916+00:00 heroku[router]: at=info method=POST path="/tweets/11" host=backbooone.herokuapp.com request_id=d54d13b6-d44c-45d0-977e-874c9fc672ca fwd="219.115.150.165" dyno=web.1 connect=0ms service=37ms status=500 bytes=1827 protocol=https

heroku run rake db:migrateした後

StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists

rails db:migrate:resetも行いました

Dropped database 'Backbone_development' Dropped database 'Backbone_test' Created database 'Backbone_development' Created database 'Backbone_test' == 20200820142448 DeviseCreateUsers: migrating ================================ -- create_table(:users) -> 0.0204s -- add_index(:users, :username, {:unique=>true}) -> 0.0173s -- add_index(:users, :email, {:unique=>true}) -> 0.0113s -- add_index(:users, :reset_password_token, {:unique=>true}) -> 0.0090s == 20200820142448 DeviseCreateUsers: migrated (0.0583s) ======================= == 20200823132550 CreateTweets: migrating ===================================== -- create_table(:tweets) -> 0.0154s == 20200823132550 CreateTweets: migrated (0.0154s) ============================ == 20200827063550 CreateFavorites: migrating ================================== -- create_table(:favorites) -> 0.0390s == 20200827063550 CreateFavorites: migrated (0.0391s) ========================= == 20200829155203 RemoveNameFromTweets: migrating ============================= -- remove_column(:tweets, :image_id, :string) rails aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: ActiveRecord::StatementInvalid: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:migrate:reset => db:migrate (See full trace by running task with --trace)

rails db:migrateした後

== 20200829155203 RemoveNameFromTweets: migrating ============================= -- remove_column(:tweets, :image_id, :string) rails aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: ActiveRecord::StatementInvalid: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace)

rails db:migrate:status

database: Backbone_development Status Migration ID Migration Name -------------------------------------------------- up 20200820142448 Devise create users up 20200823132550 Create tweets up 20200827063550 Create favorites down 20200829155203 Remove name from tweets

追記

create_table :users do |t| ## Database authenticatable t.string :username, null: false t.text :profile t.string :profile_image_id t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: ""
class CreateTweets < ActiveRecord::Migration[6.0] def change create_table :tweets do |t| t.integer :user_id t.string :title t.text :body t.timestamps end end end
class CreateFavorites < ActiveRecord::Migration[6.0] def change create_table :favorites do |t| t.integer :user_id t.integer :tweet_id t.timestamps end end end
class RemoveNameFromTweets < ActiveRecord::Migration[6.0] def change remove_column :tweets, :image_id, :string end end
ActiveRecord::Schema.define(version: 2020_08_23_132550) do create_table "tweets", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.integer "user_id" t.string "title" t.text "body" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.string "username", null: false t.text "profile" t.string "profile_image_id" t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true t.index ["username"], name: "index_users_on_username", unique: true end end
class Tweet < ApplicationRecord belongs_to :user attachment :image has_many :favorites, dependent: :destroy with_options presence: true do validates :title validates :body end end
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :username, presence: true, uniqueness: true attachment :profile_image has_many :tweets, dependent: :destroy has_many :favorites, dependent: :destroy def already_favorited?(tweet) self.favorites.exists?(tweet_id: tweet.id) end end
class Favorite < ApplicationRecord belongs_to :user belongs_to :tweet validates_uniqueness_of :tweet_id, scope: :user_id end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no1knows

2020/08/31 11:14

すべてのマイグレーションファイルとそれぞれのモデルを追加してもらえないでしょうか?
maeshu

2020/08/31 11:23

返信ありがとうございます かしこまりました。
guest

回答1

0

まず手順としては、Localでエラーが出ない状態を目指します。

①RemoveNameFromTweetsのマイグレーションファイルがあればそれを削除。
②DB自体をリセットしてよければrails db:migrate:resetを実行。
③投稿の削除機能をテスト。

エラーが出るようであれば適宜対応。
それぞれのモデルについての開示がなかったのですが・・・モデル部分は要確認だと思います。


上記で問題なければherokuでDB削除して作り直しを行う。
DB削除が手間ならherokuアプリを一度削除して、作り直してもいいかもしれません。


その理由ですがまず下記のエラーでimage_idというカラムはありませんと記載があります。

Mysql2::Error: Can't DROP 'image_id'; check that column/key exists

このエラーは20200829155203_remove_name_from_tweets.rbで表示されているわけなのですが、それ以前のマイグレーションファイルを見ても、image_idというカラムを作っていないのに、削除要請をだしていることでエラーが出ていると考えられます。

以前に間違えて作ってしまったマイグレーションの'image_id'が原因だと思ったため、'rails g migration RemoveNameFromTweets image_id:string'を行いました。

このときにもう少し調査が必要だったような気がします。

投稿2020/08/31 12:05

no1knows

総合スコア3365

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maeshu

2020/08/31 12:26

丁寧なご説明ありがとうございます。①なのですが、削除のコマンドを調べて入力したのですが、何度しても消すことができないです。打ったコマンドはrm -rf db/migrate/20200829155203_RemoveNameFromTweets です。
no1knows

2020/08/31 12:34

いつもコマンドで消していないの正確かどうかわからないですが、-rfはディレクトリを消すと書いてあったので、たぶん下記のような形になるのかと。 rm db/migrate/20200829155203_RemoveNameFromTweets.rb
maeshu

2020/08/31 12:40

rm: db/migrate/20200829155203_RemoveNameFromTweets.rb: No such file or directory という表記が出て来てしまいました...。
no1knows

2020/08/31 13:06

①RemoveNameFromTweetsのマイグレーションファイル「があれば」それを削除 なのでなければ②に進んでもらって大丈夫です。 たぶんRemoveNameFromTweets.rbを作ったのはHeroku上だけということなのだと思います。
maeshu

2020/08/31 13:14

②も実行してみたのですが、またエラーが出てしまいます...。 rails aborted! ActiveRecord::NoEnvironmentInSchemaError: Environment data not found in the schema. To resolve this issue, run: rails db:environment:set RAILS_ENV=development /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments (See full trace by running task with --trace)
no1knows

2020/08/31 13:28

エラーは、慣れるまで翻訳する癖をつけるといいです。 ----deepl.comで翻訳---- rails は中止されました! ActiveRecord::NoEnvironmentInSchemaError。 環境データがスキーマに見つかりませんでした。この問題を解決するには、実行します。 rails db:environment:set RAILS_ENV=development /Users/maedashuya/projects/Backbone/bin/rails:9:in `<トップ(必須)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<トップ(必須)>' bin/rails:3:in `load' bin/rails:3:in `<main>' タスクです。TOP => db:migrate:reset => db:drop => db:check_protected_environments (--trace でタスクを実行すると完全なトレースを見ることができます) ----deepl.comで翻訳---- ということでまずは下記を実行してみましょう rails db:environment:set RAILS_ENV=development
maeshu

2020/08/31 13:46 編集

ありがとうございます。 実行したのですが、何のエラー文も表示されませんでした。 そのため、もう一度rails db:migrate:resetを実行しました。 rails db:environment:set RAILS_ENV=development rails db:migrate:reset Dropped database 'Backbone_development' Dropped database 'Backbone_test' Created database 'Backbone_development' Created database 'Backbone_test' == 20200820142448 DeviseCreateUsers: migrating ================================ -- create_table(:users) -> 0.0191s -- add_index(:users, :username, {:unique=>true}) -> 0.0185s -- add_index(:users, :email, {:unique=>true}) -> 0.0142s -- add_index(:users, :reset_password_token, {:unique=>true}) -> 0.0109s == 20200820142448 DeviseCreateUsers: migrated (0.0629s) ======================= == 20200823132550 CreateTweets: migrating ===================================== -- create_table(:tweets) -> 0.0137s == 20200823132550 CreateTweets: migrated (0.0138s) ============================ == 20200827063550 CreateFavorites: migrating ================================== -- create_table(:favorites) -> 0.0146s == 20200827063550 CreateFavorites: migrated (0.0146s) ========================= == 20200829155203 RemoveNameFromTweets: migrating ============================= -- remove_column(:tweets, :image_id, :string) rails aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: ActiveRecord::StatementInvalid: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: Mysql2::Error: Can't DROP 'image_id'; check that column/key exists /Users/maedashuya/projects/Backbone/db/migrate/20200829155203_remove_name_from_tweets.rb:3:in `change' /Users/maedashuya/projects/Backbone/bin/rails:9:in `<top (required)>' /Users/maedashuya/projects/Backbone/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:migrate:reset => db:migrate (See full trace by running task with --trace)
no1knows

2020/08/31 13:51

どこかにファイルがのこっているのですね。 rails destroy migration RemoveNameFromTweets 上記を実行したらどうなりますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問