尝试创建模型时,“ rails generate”命令挂起


69

我是Rails的新手,今天早上决定放弃我的整个数据库设计/模型并重新开始。而且,作为菜鸟,我敢肯定做错了。

我删除了其中的所有文件db/migrate/并删除了表。当我尝试生成第一个新模型类时,导轨刚刚挂起。在我击中^ C并尝试其他方法之前,先在杂草中脱掉10分钟。

这次,我再次放下桌子,将整个项目移到project.bad并运行新的rails重新开始。同样,用旧名称生成新项目后,它挂在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之后会发生什么吗?


在挂起导轨之前,您发出了什么命令?挂了什么?网络服务器?控制台?
mahatmanich

我尝试了“ rails生成模型用户”和“ rails生成控制器欢迎索引”。两个命令都挂了。这是我项目开发的早期阶段,因此我只能扔掉所有当前代码并重新开始,但是如果名称与原始名称相同(在删除后,Rails会对新创建的项目做得更好)或将其重命名)。
Bret 2015年

您是否尝试过重置终端?关闭所有终端窗口?可能是旧的Rails环境仍然存在。使用rvm或rbenv?
mahatmanich

使用rbenv。我将尝试关闭终端并获取新终端。
Bret 2015年

如果重命名,当然还需要重命名应用程序'config / application.rb'...在旧项目中,bundle或bundle install是否做了任何事情。此外,您的“生成”命令是否正确结束并且没有在某些终端必杀技中发送给您,例如命令末尾的一个/
-mahatmanich

Answers:


211

如果您的rails generate命令挂起,则很可能是生成的轨槽。如前所述,您已重命名该项目。

我的有根据的猜测是,binstub中的某些路径仍设置为旧项目目录,但不再存在。

有一篇很棒的文章介绍了binstubs的工作原理:https//github.com/sstephenson/rbenv/wiki/Understanding-binstubs

栏杆4

要重置binstub,只需bin/在rails中删除目录并运行:

# 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/在rails中删除目录并运行:

rake app:update:bin

为什么我们需要对Rails 5和更高版本使用'rake'命令,而不是对'rails'命令本身使用?

由于rails 5,一些“ rake”命令封装在“ rails”命令中。但是,当删除“ bin /”目录时,一个人也会同时删除“ rails”命令本身,因此,由于“ rails”不再可用,但“ rake”仍然可用,因此需要返回“ rake”进行重置。


我怀疑我应该回到VERSION = 0,但是我想做的是扔掉到目前为止所做的一切,因此我从db / migrate中删除了所有内容。我说这是一个菜鸟错误。...我已经在上面包含了log / development.log的内容。
Bret 2015年

糟糕!“ rails new”工作正常,但是“ rails生成Foo模型”失败并导致挂起。我已经纠正了原始问题以反映这一点。
Bret 2015年

1
@Aaroninus Ah很有道理。从Rails 5开始,一些Rake命令被封装在rails命令中。但是,在删除时,您bin/还要删除该rails命令,因此您必须返回rake。我会进行更新。感谢您的注意!
mahatmanich

1
谢谢!这是我的问题。rake app:update:bin在Rails 5中运行后,脚手架跑了。
克里斯托弗·沃灵顿

1
您对Rails 5的解决方案对我来说就像是一种魅力。我当时正在搭建一个脚手架,挂在我身上。现在,它工作正常!万分感谢!!
Biju

75

http://www.dixis.com/?p=754找到了

对于我的一个项目,我正在使用rails 4.1(出血边缘!是的:)),突然发现,早上打开笔记本电脑后,我的常规rails命令如下

$> rails c
$> rails g migration Bla name description some_more_fields

只是……挂了,什么也没发生???就像他们在等待进一步的输入。经过仔细研究,我认为与弹簧过程的连接已丢失/损坏(我在网络之间移动了很多?也许可以解释一下)。

对于那些没有意识到的人,就像我以前一样,spring是一个Rails应用程序预加载器。它通过使应用程序在后台运行来加快开发速度,因此您无需在每次运行测试,执行rake任务或迁移时都启动它。当然,当该连接丢失或损坏时,它会挂起。

一个简单的

$> spring stop

停止spring服务器,之后任何rails命令将自动重启它。固定的:)


2
这正是我的问题。谢谢!
Jarsen

1
这解决了我的问题。谢谢!!
Yusufali2205 '19

同样在这里。如果有人搜索,请在Windows 10上使用wsl2运行debian。
阿德里安

11

在Rails 5中,binstup是使用rails命令创建的。

我只是自己删除了bin文件夹,然后运行rails app:update:bin来解决我的问题。

在Rails 5中,应用程序的bin /目录包含可执行文件,其版本与任何其他源代码一样,而不是按需生成的存根。

升级方法如下:

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

2

我只好杀了spring

之前

$ rails generate yaddi-yaddi-yadda
hang...
hang...
hang..
^C

我的解决方法:

$ ps -u {user} | grep rails
123 123456 spring app ...

找到pid,然后杀死spring

$ rails generate yaddi-yaddi-yadda
# success.

1

TL; DR:重新启动计算机对我有用。

我遇到了同样的问题,尽管选择的答案行得通,但我不愿意删除一堆我完全不了解的内容。bin删除bin目录并运行后,我在目录上的git状态看起来像这样rails app:update:bin

deleted:    bin/bundle
modified:   bin/rails
modified:   bin/rake
modified:   bin/setup
deleted:    bin/spring
deleted:    bin/webpack
deleted:    bin/webpack-dev-server
deleted:    bin/yarn

我觉得以后可能会再次遇到麻烦,因此,在阅读了接受的答案(http://www.dixis.com/?p=754)中引用的文章后,我决定重新启动计算机,这样可以解决问题任何网络问题。它像魅力一样运作。


-1

尝试使用时,我遇到了同样的问题rails g controller,它会挂起。我使用了@mtrolle建议的相同步骤:

bundle config --delete bin
rails app:update:bin
git add bin

因此,当我运行时: rails g controller Project indexGET 'project/index'按预期创建了控制器,帮助器以及索引视图和路由。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.