Подтвердить что ты не робот

Команды "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?

4b9b3361

Ответ 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', как ожидалось.