0

この問題に直面した既存のアプリケーションで sqlite3 から postgresql に切り替えようとしたときrake db:migrate、次のことを行いました。

1 - レーキ データベース:作成

2-rake db:migrateこのエラーが発生しました:

== AddColumn1: migrating ===================================================== -- add_column(:users, :first_name, :string) rake aborted! An error has occurred, this and all later migrations canceled: PG::Error: ERROR: relation "users" does not exist

3-rake db:reset

4- rake db:migrate、移行はエラーなしで完了しました

rake db:reset が原因で、特に管理者ユーザーのデータを失いました。私の質問は次のとおりです。

1-なぜ使用を余儀なくされたのrake db:resetですか?

2- 次回データを失うことなく、あるデータベース エンジンから別のデータベース エンジンにデータを転送する方法はありますか?

3-そしてPostgreSQLの場合、空のパスワードを使用できませんでした.パスワードfe_sendauth: no password suppliedを追加した後、このエラーはなくなりました.Sqlite3の代わりに別のデータベースエンジンでパスワードを使用する必要がありますか?

4-開発中に別のデータベースエンジンを使用すると、herokuもリセットが必要になりますか、それともGithubがデータを受け入れるようになりますか?

4

4 に答える 4

4

この Railscast は移行に関する優れたリソースであり、ほとんどの質問に答えるはずです。

http://railscasts.com/episodes/342-migrating-to-postgresql

于 2013-08-09T15:11:45.253 に答える
3

では、あなたが言っているのは、sqlite3 データベースのデータが失われたということですか? これは起こるべきではありませんでした。config フォルダーの database.yml を変更して、アプリが新しい Postgres DB を指すようにしましたか? 新しいDBを指していた場合、アプリがヒットしなくなったため、sqlite3 DBのデータが失われることはありません。

実際に新しいデータベースを使用するようにデータベース構成を変更した場合は、データが失われていない可能性があります。そうであることを願っています。:)

1- なぜ強制的に rake db:reset を使用したのですか?

移行ファイルがめちゃくちゃでない限り、新しい DB で rake db:reset を実行する必要はなかったと思います。

2- 次回データを失うことなく、あるデータベース エンジンから別のデータベース エンジンにデータを転送する方法はありますか?

2 つの db インスタンス (古いインスタンスと移行先の新しいインスタンス) を指す rake タスクまたはスクリプトを作成できます。次に、古いデータベースからデータをプルし、必要に応じてデータをマッサージし (各 RDBM には独自の小さな構文上の違いがあります)、それらを新しいデータベースにロードできます。

3-およびPostgreSQLの場合、空のパスワードを使用できませんでした.fe_sendauth:パスワードが提供されていません.パスワードを追加した後、このエラーはなくなりました.Sqlite3の代わりに別のデータベースエンジンでパスワードを使用する必要がありますか?

作成した Postgres DB インスタンスのセットアップ方法によって異なります...

4-開発中に別のデータベースエンジンを使用すると、herokuでもリセットが必要になりますか、それともGithubがデータを受け入れるようになりますか?

Heroku に DB をセットアップするのは非常に簡単です。あなたがしなければならないのは、次のことだけです。

heroku crate your-app-name
git push heroku master
heroku run db:migrate

しかし、移行ファイルに問題があると思います。それにもかかわらず、実際には Heroku 上の DB のユーザー名/パスワードを取得し、スクリプトを使用してローカル DB からデータをプッシュすることができます。

これが役立つことを願っています!

于 2013-08-09T15:57:52.613 に答える
1

Devise を使用している場合は、次を使用してユーザー アカウント情報をリロードできます。

rake db:seed
于 2013-11-27T09:41:44.787 に答える