【发布时间】:2014-04-19 03:38:01
【问题描述】:
我正在设置我的第一个 Rails 4.1 应用程序,它附带 Spring,他们的新预加载器。当我尝试使用他们的生成器 ($ rails generate devise:install) 安装 Devise 时,命令行只是挂起并且没有生成任何内容。
如果我从 gem 文件中删除 Spring 并重试,Devise 生成器就会工作。
有人有什么见解吗?
【问题讨论】:
我正在设置我的第一个 Rails 4.1 应用程序,它附带 Spring,他们的新预加载器。当我尝试使用他们的生成器 ($ rails generate devise:install) 安装 Devise 时,命令行只是挂起并且没有生成任何内容。
如果我从 gem 文件中删除 Spring 并重试,Devise 生成器就会工作。
有人有什么见解吗?
【问题讨论】:
检查您当时正在处理的其他一些项目的目录,生成的文件很可能会在那里结束。
当您一次使用多个 Rails 应用程序时,spring 似乎会感到困惑。这可能是导致您的问题的原因
spring 作为服务器运行,并保持一个 rails 环境加载。我认为发生的情况是,如果您一次处理多个项目,那么 spring 系统似乎会感到困惑并使用错误的环境。
我曾经在一个项目中运行rails g ... 并且文件正在另一个项目中生成。疯狂的是,我一直在重命名和移动另一个文件夹,但生成器仍然把文件放在那个文件夹中。好像 spring 已经锁定了该文件夹的 inode。
试试DISABLE_SPRING=1 rails g devise:install
或ps aux |grep spring 并杀死您看到的所有进程,然后运行rails g devise:install
我们现在从Gemfile 中取出弹簧,而这种破坏行为仍然存在,并且将来使用rails new --skip-spring
如果您想继续使用 spring,请尝试遵循这些规则
rails new blog,请继续使用它,然后再次使用mv blog blog.old 和rails new blog,它可能不起作用。【讨论】:
spring stop 就足够了。
您可以通过传递环境变量DISABLE_SPRING=1 为任何$ rails 命令禁用spring。
$ DISABLE_SPRING=1 rails generate devise:install
或者,您可以尝试$ spring stop 来降低弹簧进程。之后运行$ rails generate 将启动一个新的spring 进程,这可能会解决临时问题。
【讨论】:
DISABLE_SPRING=1 将阻止 rails 通过 Spring 引导命令,但 Spring 服务器仍然在后台运行。这对 OP 来说可能是也可能不是问题。在命令提示符下运行spring stop确实 会停止 Spring 服务器(至少在 Rails 4.2.0 中),并在 Gemfile 中注释掉它会阻止它再次启动。 (除非您在另一个仍然启用它的项目上工作。)
对于响应者 gem,rails 5.1.4 也存在同样的问题
我列出了解决方案和以前的解决方案:
DISABLE_SPRING=1 bundle exec rails generate responders:install
export DISABLE_SPRING=1
ps ax | grep spring | grep YOUR_APP_NAME | cut -f1 -d' ' | xargs kill
【讨论】:
这是一篇旧帖子,但我认为我的经验可能会对某人有所帮助......
导轨 5.0.1
在我弄乱了一些设计生成的文件(我是 Rails 和学习新手)之后,我遇到了同样的问题,然后我尝试使用 rails destroy devise 模型,我被卡住了,尝试了很多次,但没有任何效果。
谷歌搜索,到这里,尝试排除 spring gems,它工作,再次添加 spring gems,并且设计再次卡在所有内容上。
我刚刚关闭了终端并打开了新的终端,它工作正常。
【讨论】:
devise 文件夹中时,似乎我刚刚遇到了与 Devise 和 Spring 相同的问题。我不打算确认和写任何其他东西,因为我还在解决它。