31

我正在设置我的第一个 Rails 4.1 应用程序,它带有 Spring,他们的新预加载器。当我尝试使用他们的生成器 ( $ rails generate devise:install) 安装 Devise 时,命令行只是挂起并且没有生成任何内容。

如果我从 gem 文件中删除 Spring 并重试,Devise 生成器就会工作。

任何人有任何见解?

4

4 回答 4

33

检查您当时正在处理的其他一些项目的目录,很可能生成的文件最终在那里。

当您一次使用多个 Rails 应用程序时,spring 似乎会感到困惑。这可能是导致您的问题的原因

spring 作为服务器运行并保持加载 rails 环境。我认为发生的情况是,如果您一次处理多个项目,那么 spring 系统似乎会感到困惑并使用错误的环境。

我曾经在一个项目中运行rails g ...并且在另一个项目中生成文件的情况。疯狂的是,我一直在重命名和移动另一个文件夹,但生成器仍然把文件放在那个文件夹中。好像弹簧锁在了那个文件夹的 inode 上。

尝试DISABLE_SPRING=1 rails g devise:install

或者ps aux |grep spring杀死你看到的所有进程然后运行rails g devise:install

当这种破坏行为持续存在时,我们从现在开始取出弹簧Gemfile,并在未来使用rails new --skip-spring

如果您想继续使用弹簧,请尝试遵循这些规则

  • 为每个新项目使用新的 shell
  • 为每个新项目使用一个新的目录名(如果你这样做rails new blog了,就在它上面工作,然后一遍mv blog blog.oldrails new blog一遍,它可能不起作用。
  • 为了安全(和理智)的缘故,不时地继续杀死所有的 spring 服务器。
于 2014-04-23T17:58:50.783 回答
8

$ rails您可以通过传递环境变量为任何命令禁用 spring DISABLE_SPRING=1

$ DISABLE_SPRING=1 rails generate devise:install

或者,您可以尝试$ spring stop降低弹簧进程。之后运行$ rails generate将启动一个新的 spring 进程,这可能会解决临时问题。

于 2015-02-15T10:15:14.167 回答
3

对于响应者 gem,rails 5.1.4 也存在同样的问题

我列出了解决方案以及以前的解决方案:

  • 关闭终端并打开新终端
  • 运行命令
    DISABLE_SPRING=1 bundle exec rails generate responders:install
    或将其导出为环境变量
    export DISABLE_SPRING=1
  • 为您的应用终止正在运行的 spring 进程
    ps ax | grep spring | grep YOUR_APP_NAME | cut -f1 -d' ' | xargs kill
于 2017-09-09T07:42:26.247 回答
2

这是一个旧帖子,但我认为我的经验可能会对某人有所帮助......

轨道 5.0.1

在我弄乱了一些设计生成的文件(我是 Rails 和学习的新手)之后,我遇到了同样的问题,然后我尝试使用 rails destroy devise 模型并且我被卡住了,尝试了很多次但没有任何效果。

谷歌搜索,到这里,尝试排除弹簧宝石,它工作,再次添加弹簧宝石,并且设计再次卡在所有东西上。

我刚刚关闭了终端并打开了新终端,它工作正常。

于 2016-09-19T06:04:36.253 回答