Rails:要求 "RMagick" 已弃用。使用 "rmagick" instead.FactoryGirl

Rails: Requiring "RMagick" is deprecated. Use "rmagick" instead.FactoryGirl

当我通过 FactoryGirl 和 Faker 创建对象时,shell 显示错误

[1] pry(main)> FactoryGirl.create(:company)
[DEPRECATION] requiring "RMagick" is deprecated. Use "rmagick" instead

但是当我在开发数据库中创建对象时 - 没问题

有工厂

  factory :company do
    title Faker::Company.name
    image Faker::Avatar.image("my-own-slug", "200x200")
  end 

怎么解决?

如果您在 Gemfile 中写入以下内容:

gem 'rmagick', :require => 'RMagick'

尝试重写如下:

gem 'rmagick'

https://github.com/gemhome/rmagick#installing-via-bundler

首先,大多数人会像这样在他们的包中包含 rmagick:

gem 'rmagick', require: false

其次,rmagick 2.15.0 刚刚发布。 (使用 bundle list 查找您的版本。)使用 bundle update.

将 gem 升级到版本 2.15.0

此时您可能仍然收到错误,因为要删除它的拉取请求是on github但尚未合并。

如果您使用的是 Carrierwave gem,您必须尝试将版本降级到 0.7.0,在您的 gem 文件中添加 'carrierwave','0.7.0' 然后 运行 在控制台上 'bundle update carrierwave'

当执行到您的行 image Faker::Avatar.image("my-own-slug", "200x200").

时,这肯定是 CarrierWave 造成的

CarrierWave 上有一个 issue 现在已关闭,修复已合并。要么在 GemFile 中包含 github 提交,要么等待下一个 gem 版本。

这已经很晚了,但它可能会对某人有所帮助:

gem 'carrierwave', :github => 'satoruk/carrierwave' , :ref => '43179f94d6a4e62f69e812f5082d6447c9138480'
gem 'rmagick', require: false

这应该会为您提供修复了 rmagick 的版本。我不确定他们为什么不将它合并到 master 中。

希望对您有所帮助。

只需更新您的 carrierwave gem 即可。

bundle update carrierwave

我在将 Rails 5 应用程序升级到 Rails 6[=15 时遇到了同样的挑战=]

这是我修复它的方法:

首先,我将 rmagick gem 的最新版本添加到 Gemfile。在撰写本文时,它是 rmagick 4.2:

gem 'rmagick', '~> 4.2'

接下来,我检查了需要 rmagick 的文件。我修改了以下文件:

class Admin::FormPrecedentsController < Admin::BaseController

  require 'RMagick'

end

对此:

class Admin::FormPrecedentsController < Admin::BaseController

  require 'rmagick'

end

就这些了。

希望对您有所帮助