1. ホーム
  2. ruby-on-rails

モデルを作成しようとすると 'rails generate' コマンドがハングする

2023-08-23 14:34:58

質問

私はrailsの初心者で、今朝、私の全体のデータベース設計/モデルを破棄し、やり直すことにしました。そして、noobである私は、それが間違っていたことを確信しています。

にあるすべてのファイルを削除しました。 db/migrate/ にあるすべてのファイルを削除し、テーブルを削除しました。そして、最初の新しいモデルクラスを生成しようとしたとき、railsはただハングしました。私が ^C を押して他のことを試すまで、10 分間雑草の中にいたのです。

今度は、再びテーブルを削除し、プロジェクト全体をproject.badに移動し、rails newを実行してやり直しました。再び、古い名前で新しいプロジェクトを生成した後、それは rails generate コマンドでハングしました (私は同じプロジェクト名を使用していました)。

絶望的になって、同じルートで別の名前で新しいプロジェクトを作成しようとしました。Eureka! しかし、元のプロジェクトまたは新しく作成したプロジェクトで、元のプロジェクト名を使用して何かを生成することが完全にできません。何が足りないのでしょうか?私はこの時点で完全な損失を気にしませんが、元のプロジェクト名を再び使用できるようにしたいのです!

log/development.log はこのような感じです。

   (255.5ms)  CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL) ENGINE=InnoDB
   (337.7ms)  CREATE UNIQUE INDEX `unique_schema_migrations`  ON `schema_migrations` (`version`) 
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT `schema_migrations`.* FROM `schema_migrations`
   (0.2ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations`

最後のSELECTの後に何が起こるかわかるか?

どのように解決するのですか?

もし、あなたの rails generate コマンドがハングアップする場合、rails の生成された binstub が問題である可能性が高いです。あなたが言及したように、プロジェクトの名前を変更しました。

私の推測では、binstubs のいくつかのパスはまだ古いプロジェクトディレクトリに設定されていましたが、もはや存在しませんでした。

binstub がどのように機能するかについての素晴らしい記事がここにあります。 https://github.com/sstephenson/rbenv/wiki/Understanding-binstubs

レール 4

binstubをリセットするには、単にあなたの bin/ ディレクトリを削除して実行します。

# generates binstubs for ALL gems in the bundle
bundle install --binstubs

# ...OR, generate binstubs for a SINGLE gem (recommended)
bundle binstubs rake

レイル5/レイル6

binstubをリセットするには、単にあなたの bin/ ディレクトリを削除して実行します。

rake app:update:bin

rails 5以降では、なぜ'rails'コマンドそのものではなく、'rake'コマンドを使用する必要があるのでしょうか?

rails 5 以降、いくつかの 'rake' コマンドは 'rails' コマンドの中にカプセル化されています。しかし、'bin/' ディレクトリを削除すると、'rails' コマンド自体も削除されるため、'rails' はもはや利用できませんが 'rake' はまだ存在しているので、リセットのために 'rake' に戻る必要があります。