设置默认数据库连接 Rails

Posted

技术标签:

【中文标题】设置默认数据库连接 Rails【英文标题】:Set default database connection Rails 【发布时间】:2012-06-28 02:36:39 【问题描述】:

我的 rails 应用程序有自己的 mysql 数据库(并且需要 mysql2 gem),但还需要为一个特定模型连接外部 MongoDB 数据库(因此我在 Gemfile 中包含了 mongoid 和 bson_ext)。现在,当我尝试为新模型生成迁移时,它告诉我

$ rails g migration CreateLocations
       error  mongoid [not found]

当我生成包含 Mongoid::Document 的 Location 模型时,Rails 显然认为它正在使用外部数据库作为我的主要数据存储。

databse.yml:

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: associalize_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

mongoid.yml:

development:
  host: pearl.mongohq.com
  port: 27019
  username: asfasdf
  password: sadfasdf
  database: app4574678

test:
  host: pearl.mongohq.com
  port: 27019
  username: asdfadhasdfa
  password: hadsadfas
  database: app4574678

production:
  host: pearl.mongohq.com
  port: 27019
  username: asdfdfsasda
  password: afdasdfdasdf
  database: app4574678

更新 使用 Mongo 的模型

class ExternalMongoModel
  include Mongoid::Document

  field :title
  field :long_title
  field :deal_type
  field :merchandise_type
  field :market_id
  field :market_name
  field :market_location, type: Array
  field :featureType
  field :country_code
  field :subtitle
  field :offer_ends_at
  field :price
  field :value
  field :merchant_type
  field :content
  field :merchant

  index(
    [[:division_latlon, Mongo::GEO2D]], background: true
  )

end

【问题讨论】:

解决方法是在我的 Gemfile 中注释掉“mongoid”,创建并运行迁移,然后取消注释并重新捆绑。显然不合法。 请贴出使用MongoDB的相关型号代码。 【参考方案1】:

将此添加到config/application.rb 中的应用程序块:

config.generators do |g|
  g.orm :active_record
end

(找到here)

【讨论】:

【参考方案2】:

如果您不想更改 config/application.rb,您可以在生成模型时使用它:

rails generate active_record:migration

如果您更改 application.rb 文件,以调用 mongoid 生成器,例如模型“联系人”,可以使用:

rails g mongoid:model contacts

(solution link)

【讨论】:

【参考方案3】:

首先检查以下块是否存在于您的 Rails 应用程序的 config/application.rb 文件中

config.generators do |g|
  g.orm :active_record
end

如果不添加则,否则可以运行

rails g active_record:migration

【讨论】:

以上是关于设置默认数据库连接 Rails的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 上“...的预期字符串默认值”的含义

Ruby on Rails 上“...的预期字符串默认值”的含义

Ruby On Rails Heroku Postgres数据库SSL连接

Rails 6 Docker 与 PostgreSQL 连接错误

Rails 2.3:Postmarkapp 的 SMTP 设置:连接被拒绝 - 连接(2)

是否可以列出池中当前的所有数据库连接?