ruby on rails - que - Los comandos ''rails generate'' se cuelgan al intentar crear un modelo
ruby on rails tutorial (4)
Soy nuevo en los rieles y esta mañana decidí volcar todo el diseño / modelo de mi base de datos y comenzar de nuevo. Y siendo un novato, estoy seguro de que lo hizo incorrectamente.
Eliminé todos los archivos en
db/migrate/
y solté las tablas.
Y cuando intenté generar la primera clase de modelo nuevo, los rieles simplemente se colgaron.
Apagado en la maleza durante 10 minutos antes de presionar ^ C e intentar otra cosa.
Esta vez, dejé caer las tablas nuevamente, moví todo el proyecto a project.bad y ejecuté rieles nuevos para comenzar de nuevo.
Una vez más, después de generar el nuevo proyecto con el nombre anterior, se colgó en el comando de
rails generate
(estaba usando el mismo nombre de proyecto).
Desesperado, intenté crear un nuevo proyecto en la misma raíz, pero con otro nombre. Eureka! Esto funcionó como un campeón, creando controladores y clases de modelos, pero no puedo generar nada usando el nombre del proyecto original, en el proyecto original o en uno recién creado. ¿Qué me estoy perdiendo para que esto vuelva a funcionar? No me importa una pérdida completa en este momento, ¡pero me gustaría poder usar el nombre del proyecto original nuevamente!
Así es como se ve 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`
¿Alguna idea de lo que se supone que sucederá después de ese último SELECT?
En Rails 5, los binstups se crean usando el comando
rails
.
Simplemente eliminé la carpeta bin y luego ejecuté la
rails app:update:bin
que solucionó mis problemas.
En Rails 5, el directorio bin / de su aplicación contiene ejecutables que se versionan como cualquier otro código fuente, en lugar de stubs que se generan a pedido.
Aquí se explica cómo actualizar:
bundle config --delete bin # Turn off Bundler''s stub generator rails app:update:bin # Use the new Rails 5 executables git add bin # Add bin/ to source control
Encontré esto en http://www.dixis.com/?p=754
Para uno de mis proyectos, estoy usando los rieles 4.1 (¡sangriento! Sí :)) y de repente me di cuenta de que, después de abrir mi computadora portátil por la mañana, mis comandos normales de rieles
$> rails c
$> rails g migration Bla name description some_more_fields
solo ... estaban colgando y no pasó nada ??? Como si estuvieran esperando más aportes. Tras una investigación más cercana, asumí que la conexión con el proceso de primavera se perdió / corrompió (¿me muevo mucho entre redes? Tal vez eso podría explicarlo).
Para aquellos que no lo sabían, como era yo, spring es un precargador de aplicaciones Rails. Acelera el desarrollo al mantener su aplicación ejecutándose en segundo plano, por lo que no necesita iniciarla cada vez que ejecuta una prueba, tarea de rastrillo o migración. Por supuesto, cuando esa conexión se pierde o se corrompe, se cuelga.
Un simple
$> spring stop
detiene el servidor de Spring, después de lo cual cualquier comando de rails lo reiniciará automáticamente. Fijo :)
Si sus
rails generate
comandos bloqueados, es muy probable que los binstubs generados de los rieles sean el problema.
Como mencionó, cambió el nombre del proyecto.
Mi conjetura es que algunas rutas en los binstubs todavía estaban configuradas en el antiguo directorio del proyecto, pero ya no existían.
Aquí hay un gran artículo sobre cómo funcionan los binstubs: https://github.com/sstephenson/rbenv/wiki/Understanding-binstubs
rieles 4
Para restablecer los binstubs, simplemente elimine su directorio
bin/
en rieles y ejecute:
# generates binstubs for ALL gems in the bundle
bundle install --binstubs
# ...OR, generate binstubs for a SINGLE gem (recommended)
bundle binstubs rake
rieles 5 / rieles 6
Para restablecer los binstubs, simplemente elimine su directorio
bin/
en rieles y ejecute:
rake app:update:bin
¿Por qué necesitamos usar el comando ''rake'' para los rieles 5 y superiores, y no el comando ''rails'' en sí mismo?
Como rails 5, algunos comandos ''rake'' están encapsulados dentro del comando ''rails''. Sin embargo, cuando se elimina el directorio ''bin /'', también se elimina el comando ''rails'' en sí, por lo que es necesario volver a ''rake'' para el restablecimiento, ya que ''rails'' ya no está disponible, pero ''rake'' todavía lo está.
Tuve el mismo problema al intentar usar el
rails g controller
y simplemente se bloqueó.
Usé los mismos pasos que @mtrolle sugirió:
bundle config --delete bin
rails app:update:bin
git add bin
Entonces, cuando ejecuté:
rails g controller Project index
, creó el controlador, los ayudantes y la vista de índice y
GET ''project/index''
route como se esperaba.