' rails生成'尝试创建模型时命令会挂起

时间:2015-08-06 13:40:12

标签: ruby-on-rails ruby-on-rails-4

我是rails的新手,并决定今天早上转储我的整个数据库设计/模型并重新开始。作为一个菜鸟,我确实做错了。

我删除了db/migrate/中的所有文件并删除了表格。当我试图生成第一个新的模型类时,rails就挂了。在我赶上^ C并尝试别的东西之前,在杂草中灭了10分钟。

这一次,我再次删除了表格,将整个项目移动到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之后会发生什么?

7 个答案:

答案 0 :(得分:136)

如果您的rails generate命令挂起,则很可能是生成的rails的binstub是问题所在。如您所述,您重命名了该项目。

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

有一篇关于binstub如何在这里工作的文章:https://github.com/sstephenson/rbenv/wiki/Understanding-binstubs

rails 4

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

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

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

rails 5 / rails 6

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

rake app:update:bin

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

由于轨道5有些' rake'命令被封装在' rails'命令。但是当一个人删除' bin /'目录一还删除了' rails'命令本身,因此需要回到“耙”。因为' rails'不再可用,但是' rake'仍然是。

答案 1 :(得分:57)

http://www.dixis.com/?p=754

找到了这个结果
  

对于我的一个项目,我正在使用rails 4.1(前沿!是啊:))并突然注意到,在早上打开我的笔记本电脑后,我的正常导轨命令,如

$> rails c
$> rails g migration Bla name description some_more_fields
  只是......挂了,什么也没发生?就像他们在等待进一步的输入。仔细研究后,我认为与弹簧过程的连接丢失/损坏(我在网络之间移动很多?也许可以解释它。)

     

对于那些不知道的人,就像我一样,spring是一个Rails应用程序预加载器。它通过让您的应用程序在后台运行来加速开发,因此您不必在每次运行测试,rake任务或迁移时都启动它。当然,当该连接丢失或损坏时,它会挂起。

     

一个简单的

$> spring stop
  

停止弹出服务器,之后任何rails命令都会自动重启。修正:)

答案 2 :(得分:10)

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

我刚刚删除了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

答案 3 :(得分:1)

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

我遇到了同样的问题,尽管选择的答案可行,但我不愿意删除一堆我完全不了解的内容。在删除bin目录并运行bin

之后,我在rails app:update:bin目录上的git状态看起来像这样
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)中引用的文章后,我决定重新启动计算机,这样可以解决所有网络问题。它像一种魅力。

答案 4 :(得分:1)

我只需要杀死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.

答案 5 :(得分:0)

关闭重新打开终端对我有用

答案 6 :(得分:-1)

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

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

所以我跑的时候: rails g controller Project index 它按预期创建了控制器,帮助器和索引视图以及GET 'project/index'路由。