Spring宝石装在错误的环境中

时间:2018-02-21 22:08:17

标签: ruby-on-rails gemfile spring-gem

为什么我的spring gem会在错误的(或所有)环境中加载?

我在我的Gemfile中有这个,并且spring gem没有在文件中的任何其他地方列出:

group :development do
  gem 'listen', '~> 3.1.5'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

当我运行bundle exec rails console test(对于test环境)时,Spring进程已启动,Listen模块已加载到rails控制台中。我确保所有弹簧过程都事先停止了。

为了进行健全性检查,我删除了上面的整个开发组并捆绑了。正如我所料,春天和听的宝石不再被加载。

3 个答案:

答案 0 :(得分:1)

我在制作中遇到了误会。

这是我的解决方法:

您还可以通过提升2019-Datacenter可执行文件(从中删除春季宝石)来永久解决此问题:

bin/

bin/spring binstub --remove --all

您现在可以运行以下命令进入生产中的Rails控制台

spring binstub --remove --all

此外,为避免在以后的情况下发生这种情况,请尽力确保spring宝石仅出现在Gemfile的rails c --environment=production development组中。

此外,在生产中,请确保始终为test命令提供--without development test参数

bundle install

而不是通常或常见的

bundle install --without development test

请注意:作为指示,每当您运行命令bundle install rails c时,您都会看到以下输出:

在进程26651中通过Spring预加载器运行 警告:Spring正在生产中。要解决此问题,请确保春季宝石仅出现在Gemfile的rails consoledevelopment组中,并确保在生产中始终使用test

这表明spring gem在您的生产环境中正在运行,应将其停止或完全从bin可执行文件中删除。

仅此而已。

我希望这会有所帮助

答案 1 :(得分:0)

根据spring gem github page,看起来rails console会加载弹簧:

  

rails console,rails generate,rails runner

     

这些执行你已经知道并喜爱的rails命令。如果你跑   一个不同的子命令(例如rails服务器)然后spring将   自动将其传递给底层的rails可执行文件   (没有加速)。

另外,这令人担忧:

  

您不得在生产环境中安装Spring。至   防止它被安装,提供 - 没有开发   测试bundle install命令的参数

rails console(开发)会有意义,但不是rails console test(或其他环境)。这对我来说似乎有些问题,现在我不喜欢这个宝石的原因。

答案 2 :(得分:0)

Spring通常用于binstubs - 你安装了binstubs吗?如果是,则这是您的rails命令正在运行的文件。

#!/usr/bin/env ruby
begin
  load File.expand_path('../spring', __FILE__)
rescue LoadError => e
  raise unless e.message.include?('spring')
end
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'

正如您所看到的,只要您使用spring命令,就会加载rails。没有检查环境。如果您不想加载spring,可以使用DISABLE_SPRING=1 rails c test