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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

3回答

16461閲覧

db:migrate:reset でエラーが出ます

pecchan

総合スコア555

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

1グッド

7クリップ

投稿2017/02/27 22:12

編集2017/02/28 03:23

Ruby on Rails 初心者です。
Windows 7 Pro
ruby Ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
Rails 5.0.1

テーブル変更があり、マイグレーションをやり直したかったのです。
そのために行った手順は、以下の通りです。

1.rails g model モデル名 でモデル作成
2.rails g migratiosn でマイグレーション
3.直接マイグレーションスクリプトの、20170227050128_create_departments.rbを編集。
4.db:migrate:resetを入力。今回のエラーが出ました。

dos

1Permission denied @unlink_internal - F:/rails/test/db/development.sqlite3 2Couldn't drop database 'db/development.sqlite3' 3rake aborted! 4Errno::EACCES: Permission denied @ unlink_internal - F:/rails/test/db/d 5evelopment.sqlite3 6 7Tasks: TOP => db:drop:_unsafe 8(See full trace by running task with --trace)

直接マイグレーションスクリプトのファイルを編集したのがまずかったのでしょうか?

まだテスト環境なので、マイグレーションを行わず、
さくっと作り直しがしたかっただけなのですが・・・・。

【追記】
rake db:resetと入力
してもエラーになります
エラーメッセージ↓
Permission denied @ unlink_internal - F:/rails/test/db/development.sqli
te3
Couldn't drop database 'db/development.sqlite3'
rake aborted!
Errno::EACCES: Permission denied @ unlink_internal - F:/rails/test/db/d
evelopment.sqlite3

Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

jun_nanika👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

おそらくはRails自体のバグです。

Windows環境では、以下のRailsコマンドで Errno::EACCESS: Permission denied @ unlink_internal という例外が発生します。

  • bin/rails db:drop
  • bin/rails db:reset
  • bin/rails db:migrate:reset

問題の根本は、Windowsでは自らがアクセスしているファイルを削除できない、という点にあります。

ですから、db/development.sqlite3` を手動で削除すれば問題を回避できます。

bin/rails db:reset の代わり:

$ rm db/development.sqlite3 $ bin/rails db:setup

bin/rails db:migrate:reset の代わり:

$ rm db/development.sqlite3 $ bin/rails db:create db:migrate

投稿2018/04/29 05:19

t-kuroda

総合スコア54

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

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

kaori_oka

2020/02/26 06:38

検索でたどり着きました!大変助かりました!
guest

0

もしまだ解決してなければ、権限がないと言われているのでコマンドの前に
sudoとつけるといけるかもしれません。
db操作は慎重にやるべきなので、本当にコマンドがあってるかとうとう確認してから試してみてください!

投稿2017/02/28 14:33

drizzing20

総合スコア363

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

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

0

windows環境で触ったことないですけど、
databaseを一度削除してもう一度作成し、db:migrate実行したいのなら、

ruby

1rake db:migrate:reset

ですよ。

ちなみに、エラーを見ると、ずっとPermission deniedと権限がないと怒っていますが、
「config/database.yml」のユーザとパスワードは、変更したりしてないですか?

投稿2017/02/28 05:52

IPU

総合スコア283

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

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

pecchan

2017/02/28 05:58

有難う御座います。 ではコマンドは合っていたわけですね。 database.ymlは、一切編集していません。 また、ユーザは管理者権限で作業していてユーザを切り替えたりもしていません。
IPU

2017/02/28 06:04

おっ、Windowsだと特別な手順が必要みたいですね。 (Windosw環境で使ったことがないので、知らなかった。) http://stackoverflow.com/questions/10290557/bundle-exec-rake-dbreset-command-raising-couldnt-drop-db-development-sqlite3 要は、Windows環境だとDBの削除する際に、Railsのサービス止めてから実行しないと、削除が出来ないみたいです。 Railsのサービスを落として、試してみてください。
pecchan

2017/02/28 06:18

度々すみません。 Railsのサービスを止めるとは、rails serverを止めるということでしょうか? であれば止めてあります。 Railsのプロセスかと思い、コマンドプロンプトでRailsと名がつくものを探しましたが見当たりません。 せっかく教えていただいたのに、何か勘違いしてるようです。 すいません。
IPU

2017/02/28 06:34

>せっかく教えていただいたのに、何か勘違いしてるようです。 なんか、刺を感じるんですが。 サービス止めてあるなんて、一言も書いてないので、勘違いじゃないと思いますが。 サービス止めてあるので、該当しなそうです。とかコメント戴ければ良いのに。。。 記載がないから、こんな事象もあるよと提案しているのに、嫌な気分になります。 一応、もう1つ思いあたる事象があったので、URL貼り付けますが、 これ以上お手伝いする気はなくなりました。 http://stackoverflow.com/questions/27138533/errnoeacces-permission-denied-unlink-internal-when-running-rake-testmodels
pecchan

2017/02/28 06:46

「刺を感じる」 この言葉も初めて知りました。 せっかくのアドバイスに勘違いしてると思い、申し訳なく思った次第でした。 変な意味はなかったのですが・・・。 気分を悪くさせてしまい申し訳ございません。 URL参考にさせていただきます。 取り急ぎ謝罪したくご連絡しました。
t-kuroda

2018/04/29 04:43

@IPU おそらく「勘違いしている」の主語はpecchanですよ。あなたが勘違いしたと非難しているんじゃないです。質問者がちょっと可哀そうになりました。 さて、Windows環境ではRailsサーバーなどをすべて止めても、依然として何かのプロセスがSQLite3のデータベースファイルを掴んでしまうことがあるようです。 いちおう、bin/rails db:drop:_unsafe; bin/rails db:migrate で続行できるのですが、その後も bin/rails db:migrate:reset や bin/rails db:reset はできなくなります。もちろんWindowsを再起動すれば問題は解決します。
t-kuroda

2018/04/29 05:06

「もちろんWindowsを再起動すれば問題は解決します」と書いてから、本当かなと思って、実際に試してみました。 すると、Windowsを再起動してもダメでした。 ということは、何かのプロセスがデータベースファイルを掴んでいるわけではなく、原因は別にあります。 もう少し調べて、独立した回答を書くつもりです。
pecchan

2018/05/01 00:49

t-kuroda様 有難う御座います。 @IPU様の件、そうなんです。私の文章力の無さのせいで誤解を生じてしまい残念でした・・・。 検証までしていただき本当に有難う御座います。 プロセスなど、意識がまったくありませんでした。 途方に暮れるところでした。 有難う御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問