当试图创建一个模型时,‘ Railsgenerated’命令会挂起

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

我删除了 db/migrate/中的所有文件,放下了表格。当我试图生成第一个新的模型类时,轨道就挂起来了。我在杂草丛里待了10分钟,然后我就打到 ^ C,开始尝试别的东西。

这一次,我再次放下表格,将整个项目移到 project.bad,并运行 Railsnew 以重新开始。同样,在使用旧名称生成新项目之后,它挂起在 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`

知道最后一次选择之后会发生什么吗?

25334 次浏览

如果您的 rails generate命令被挂起,那么问题很可能就出在生成的 binstubs 的 Rail 上。正如您提到的,您重命名了项目。

根据我的经验,binstubs 中的一些路径仍然被设置为旧的项目目录,但不再存在。

这里有一篇关于 binstubs 如何工作的文章: 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

为什么我们需要为 Rails5或更高版本使用‘ rake’命令,而不是‘ Rails’命令本身?

由于 Rails5,一些“ rake”命令被封装在“ Rails5”命令中。然而,当删除“ bin/”目录时,也就是删除了“ ails”命令本身,因此需要返回“ rake”进行重置,因为“ ails”不再可用,但“ rake”仍然可用。

http://www.dixis.com/?p=754发现了这个

对于我的一个项目,我正在使用 Rails4.1(出色的边缘!是的:)然后突然注意到,早上打开我的笔记本电脑后,我的正常轨道命令,像

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

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

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

很简单

$> spring stop

停止 Spring 服务器,在此之后,任何 Rails 命令都会自动重新启动它

在 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

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

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

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

重新启动计算机对我有用。

我也遇到了同样的问题,尽管我选择的答案有效,但是删除一大堆我确实不能完全理解的东西让我感到不舒服。删除 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) ,我决定只是重新启动我的电脑,因为这将解决任何网络问题。效果非常好。

我必须杀了 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.

关门,重新打开航站楼对我来说很有用