Команды "rails generate" зависают при попытке создать модель
Я новичок в рельсах и решил сегодня утром свалить весь дизайн/модель базы данных и начать все заново. И, будучи noob, я уверен, что сделал это неправильно.
Я удалил все файлы в db/migrate/
и сбросил таблицы. И когда я попытался создать первый новый класс модели, рельсы просто висели. Выключить в сорняках в течение 10 минут, прежде чем я ударил ^ C и попробовал что-то еще.
На этот раз я снова уронил таблицы, переместил весь проект в project.bad и запустил rails new для начала. Опять же, после создания нового проекта со старым именем он зависает над командой rails generate
(я использовал одно и то же имя проекта).
В отчаянии я попытался создать новый проект в том же корне, но с другим именем. Эврика! Это работало как чемпион, создавая контроллеры и классы моделей, но я полностью не могу генерировать ничего, используя оригинальное название проекта, в исходном проекте или в любом новом. Что мне не хватает, чтобы снова работать? Я не против полной потери на данный момент, но я бы хотел снова использовать оригинальное название проекта!
Вот что выглядит 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?
Ответы
Ответ 1
Если ваши команды rails generate
зависают, скорее всего, проблема с создаваемыми binstubs рельсов. Как вы упомянули, вы переименовали проект.
Моя образованная догадка заключается в том, что некоторые пути в binstubs по-прежнему устанавливались в старый каталог проектов, но больше не существовали.
Существует отличная статья о том, как здесь работают binstubs: https://github.com/sstephenson/rbenv/wiki/Understanding-binstubs
рельсы 4
В reset binstubs просто удалите каталог bin/
в рельсах и запустите:
# generates binstubs for ALL gems in the bundle
bundle install --binstubs
# ...OR, generate binstubs for a SINGLE gem (recommended)
bundle binstubs rake
рельсы 5
В reset binstubs просто удалите каталог bin/
в рельсах и запустите:
rake app:update:bin
Ответ 2
Нашел это в http://www.dixis.com/?p=754
Для одного из моих проектов я использую rails 4.1 (bleeding edge! yeah:)) и вдруг заметил, что после открытия моего ноутбука утром мои обычные команды рельсов, вроде
$> rails c
$> rails g migration Bla name description some_more_fields
просто... висели, и ничего не случилось??? Как будто они ждали дальнейшего ввода. При ближайшем рассмотрении я предположил, что соединение с процессом spring было потеряно/повреждено (я много перемещаюсь между сетями, возможно, это может объяснить это).
Для тех, кто не знает, как я был, spring является предварительным загрузчиком приложений Rails. Это ускоряет разработку, поддерживая приложение в фоновом режиме, поэтому вам не нужно загружать его каждый раз, когда вы запускаете тестовую задачу, рейк или миграцию. Конечно, когда это соединение потеряно или повреждено, оно зависает.
Простой
$> spring stop
останавливает сервер spring, после чего любая команда rails перезапустит его автоматически. Исправлено:)
Ответ 3
В Rails 5 binstups создаются с помощью команды rails
.
Я просто удалил папку bin, а затем запустил rails app:update:bin
, который исправил мои проблемы.
В Rails 5 ваш каталог приложения bin/содержит исполняемые файлы, которые версируются как и любой другой исходный код, а не заглушки, которые генерируются по требованию.
Здесь как обновить:
bundle config --delete bin # Turn off Bundler stub generator
rails app:update:bin # Use the new Rails 5 executables
git add bin # Add bin/ to source control
Ответ 4
У меня была такая же проблема при попытке использовать rails g controller
, и она просто зависала. Я использовал те же шаги, что предложил @mtrolle:
bundle config --delete bin
rails app:update:bin
git add bin
Итак, когда я побежал:
rails g controller Project index
он создал контроллер, помощники, индексный указатель и маршрут GET 'project/index'
, как ожидалось.