我对控制台中收到的模型(调用 'Model.connection' 建立连接)消息感到困惑

I'm confused by Model (call 'Model.connection' to establish a connection) message received in console

我最近在启动我的第一个 Rails 5 应用程序后注意到了这一点,但直到现在,它还没有引起我无法克服的问题。

当我尝试编写我的第一个 Rake 任务时,我无法克服的问题来了。我继续收到此错误:

ruby 2.3.3-p222
╳  ad_board categories ◆◆ rake reprocess_images                                                                                                                  
rake aborted!
NameError: uninitialized constant Image
/home/myname/Documents/workspace/ad_board/lib/tasks/reprocess_images.rake:3:in `block in <top (required)>'
/home/myname/.rvm/gems/ruby-2.3.3@myapp/gems/rake-11.3.0/exe/rake:27:in `<top (required)>'
/home/myname/.rvm/gems/ruby-2.3.3@myapp/bin/ruby_executable_hooks:15:in `eval'
/home/myname/.rvm/gems/ruby-2.3.3@myapp/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => reprocess_images

我假设我错误地编写了 rake 任务(可能仍然如此)或者我在这种情况下制作了我的模型 image.rb images.rb,但我没有。

当我去 rails c 看看我是否能弄清楚发生了什么,在输入 Image 后,我希望得到图像的参数,但我却得到了这个错误信息:

[1] pry(main)> Image
=> Image (call 'Image.connection' to establish a connection)

所以,我尝试了一些其他的东西:

[2] pry(main)> Image.connected?
=> false
[3] pry(main)> User.connected?
=> false
[4] pry(main)> Gallery.connected?
=> false

和...

[1] pry(main)> Image
=> Image (call 'Image.connection' to establish a connection)
[2] pry(main)> User
=> User (call 'User.connection' to establish a connection)
[3] pry(main)> User.first
  User Load (1.3ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT   [["LIMIT", 1]]
=> #<User id: 1, email: "user@example.com", created_at: "2017-01-10 21:43:53", updated_at: "2017-01-10 21:43:53", name: "First User", role: "admin", auth_token: nil>
[4] pry(main)> Image.first
  Image Load (0.9ms)  SELECT  "images".* FROM "images" ORDER BY "images"."id" ASC LIMIT   [["LIMIT", 1]]
=> #<Image:0x0000000595bf00 id: 1, file: "creativity.jpg", user_id: 20, created_at: Tue, 10 Jan 2017 21:43:58 UTC +00:00, updated_at: Tue, 10 Jan 2017 21:43:58 UTC +00:00>

我也输入了Image.connection,但是和上面的代码一样,只是临时建立连接。离开控制台后,我继续从 运行 宁我的 rake 任务中收到原始错误消息。

我回到控制台并输入 Image,然后收到消息 => Image (call 'Image.connection' to establish a connection)

那么,第一个问题是,为什么 "connection" 会自行中断、无法建立或保持不变?以我有限的经验,我以前没有 运行 参与过这个。

显而易见的后续行动是,如何解决问题并保持连接?

提前感谢您对这个问题的任何见解。

连接不会中断,只是在您执行需要的操作后才会连接。没有什么可以明智地修复连接。您实际的佣金问题是找不到 Image 模型。我怀疑这是因为你没有告诉 rake 加载 rails 环境。

在 rails 中,您可以在 rake

中执行以下操作
task reprocess_images: :environment do                              
  Image.find_each do |img|
    #do something
  end                                                                   
end    

:environment 告诉它加载 rails 环境,它将为您自动加载内容。

你可以做到

console { ActiveRecord::Base.connection }

在你的开发环境中忽略它。