【问题标题】:'rails generate' commands hang when trying to create a model'rails generate' 命令在尝试创建模型时挂起
【发布时间】:2015-08-06 13:40:11
【问题描述】:

我是 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 之后会发生什么吗?

【问题讨论】:

  • 在 rails 挂起之前你发出了什么命令?什么挂了?网络服务器?控制台?
  • 我尝试了“rails 生成模型用户”和“rails 生成控制器欢迎索引”。两个命令都挂了。这是我项目开发的早期阶段,我可以扔掉所有当前代码并重新开始,但是如果新创建的项目名称与原件(在我删除或重命名原件之后)。
  • 您是否尝试重置终端?关闭所有终端窗口?可能是旧的 rails 环境仍然存在。使用 rvm 还是 rbenv?
  • 使用 rbenv。我会尝试关闭终端并获得新的。
  • 如果你重命名了它,你当然还需要重命名应用程序'config/application.rb' ... bundle 或 bundle install 在旧项目中做了什么。此外,您的“生成”命令是否正确结束并且没有向您发送某些终端必杀技,例如一个 / 在命令的末尾

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


【解决方案1】:

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

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

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

导轨 4

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

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

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

轨道 5/轨道 6

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

rake app:update:bin

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

从 Rails 5 开始,一些“rake”命令被封装在“rails”命令中。然而,当删除“bin/”目录时,也会删除“rails”命令本身,因此需要返回“rake”进行重置,因为“rails”不再可用,但“rake”仍然可用。

【讨论】:

  • 我认为我应该回到 VERSION=0,但我想做的是扔掉我到目前为止所做的一切,所以我从 db/migrate.xml 中删除了所有内容。我说这是一个菜鸟的错误......我已经包含了上面的 log/development.log 的内容。
  • 糟糕,我搞砸了。 “rails new”工作,但“rails generate model Foo”失败并导致挂起。我已经更正了原始问题以反映这一点。
  • @Aaroninus Ah 说得通。从 Rails 5 开始,一些 Rake 命令被封装在 rails 命令中。但是,当您删除 bin/ 时,您也将删除 rails 命令,因此您必须返回 rake。我会更新的。感谢您的提醒!
  • 谢谢!这是我的问题。在 Rails 5 中运行 rake app:update:bin 后,脚手架运行了。
  • 你的 rails 5 解决方案对我来说就像一个魅力。我正在生成一个为我悬挂的脚手架;现在它工作得很好!非常感谢!
【解决方案2】:

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

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

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

只是……挂了,什么也没发生???就像他们在等待进一步的输入一样。经过仔细调查,我假设与 spring 进程的连接丢失/损坏(我经常在网络之间移动?也许这可以解释它)。

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

一个简单的

$> spring stop

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

【讨论】:

  • 这正是我的问题。谢谢!
  • 这解决了我的问题。谢谢!!
  • 这里也一样。在 Windows 10 上使用 wsl2 运行 debian,以防有人搜索。
【解决方案3】:

在 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

【讨论】:

    【解决方案4】:

    我只好杀了spring

    之前

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

    我的解决方法:

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

    找到 pid,然后杀死 spring

    $ rails generate yaddi-yaddi-yadda
    # success.
    

    【讨论】:

      【解决方案5】:

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

      我遇到了同样的问题,虽然选择的答案有效,但我不愿意删除一堆我承认不完全理解的东西。在删除 bin 目录并运行 rails app:update:bin

      后,我在 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) 中引用的文章后,我决定重新启动计算机,因为这样可以解决任何网络问题。它就像一个魅力。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-01
            • 1970-01-01
            • 2017-12-31
            • 1970-01-01
            相关资源
            最近更新 更多