【问题标题】:Rails Spring breaking generatorsRails 弹簧断裂发电机
【发布时间】:2014-04-19 03:38:01
【问题描述】:

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

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

有人有什么见解吗?

【问题讨论】:

    标签: ruby-on-rails-4.1


    【解决方案1】:

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

    当您一次使用多个 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,请尝试遵循这些规则

    • 为每个新项目使用新的 shell
    • 为每个新项目使用一个新的目录名称(如果您使用rails new blog,请继续使用它,然后再次使用mv blog blog.oldrails new blog,它可能不起作用。
    • 为了安全(和理智)着想,不时地继续杀死所有 Spring 服务器。

    【讨论】:

    • 我只有一个项目,但 Rails 生成器仍然花了很长时间 - 从 gemfile 中删除 spring 修复了它。所以,春天是问题,但不一定是由于多个项目
    • 确实 Spring 确实坏了。默认情况下,Rails 团队会添加一个损坏的 gem。
    • 不用杀死进程,spring stop 就足够了。
    • 有没有办法在不重启终端的情况下再次开启 Spring?
    【解决方案2】:

    您可以通过传递环境变量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 中注释掉它会阻止它再次启动。 (除非您在另一个仍然启用它的项目上工作。)
    【解决方案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

    【讨论】:

      【解决方案4】:

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

      导轨 5.0.1

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

      谷歌搜索,到这里,尝试排除 spring gems,它工作,再次添加 spring gems,并且设计再次卡在所有内容上。

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

      【讨论】:

      • 当我试图将 RegistrationsController 放在控制器上的 devise 文件夹中时,似乎我刚刚遇到了与 Devise 和 Spring 相同的问题。我不打算确认和写任何其他东西,因为我还在解决它。
      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2017-12-22
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      相关资源
      最近更新 更多