设置默认数据库连接Rails

Chr*_*ris 18 database activerecord ruby-on-rails mongoid

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

$ rails g migration CreateLocations
       error  mongoid [not found]
Run Code Online (Sandbox Code Playgroud)

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

databse.yml:

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: associalize_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

UPDATE 使用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
Run Code Online (Sandbox Code Playgroud)

小智 29

将其添加到config/application.rb中的Application块:

config.generators do |g|
  g.orm :active_record
end
Run Code Online (Sandbox Code Playgroud)

(此处找到解决方案)


Nan*_*nda 20

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

rails generate active_record:migration
Run Code Online (Sandbox Code Playgroud)

如果您更改application.rb文件,要调用mongoid生成器,比如模型"contacts",可以使用:

rails g mongoid:model contacts
Run Code Online (Sandbox Code Playgroud)

(解决方案链接)


小智 6

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

config.generators do |g|
  g.orm :active_record
end
Run Code Online (Sandbox Code Playgroud)

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

rails g active_record:migration
Run Code Online (Sandbox Code Playgroud)