我是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之后会发生什么?
答案 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)
对于我的一个项目,我正在使用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'
路由。