我认为这可能对您有帮助:
我正在使用rails 4.2,并尝试(在已经建立的应用程序中)配置this second database approach之后的经过审核的宝石。
我的config / database.yml文件如下:
default: &default
adapter: mysql2
pool: 5
timeout: 5000
development:
<<: *default
host: <%= ENV["MYSQL_HOST"] %>
username: <%= ENV["MYSQL_USER"] %>
password: <%= ENV["MYSQL_PASSWORD"] %>
database: <%= ENV["MYSQL_DATABASE"] %>
test:
<<: *default
host: <%= ENV["MYSQL_HOST"] %>
username: <%= ENV["MYSQL_USER"] %>
password: <%= ENV["MYSQL_PASSWORD"] %>
database: <%= ENV['TEST_ENV_DB'] %>
而且我打算使它除开发,测试或生产之外还可以用于另一个数据库。但是,任务rake db:create
仅创建我的开发和测试数据库。这可以在我的rails版本中完成吗?
audition:
<<: *default
host: <%= ENV["MYSQL_HOST"] %>
username: <%= ENV["MYSQL_USER"] %>
password: <%= ENV["MYSQL_PASSWORD"] %>
database: <%= ENV["AUDITION_DATABASE"] %>
注意试听数据库的新名称
我认为您想创建一个新的环境调用audition
,对吗?!。
config/environments/test.rb
并将其重命名为config/environments/audition.rb
使用新环境更新config文件夹下可能具有的任何其他配置文件,有些gem需要对其进行配置。
现在您可以启动服务器
rails server -e audition
如果要在rails <6中读取/写入秒数数据库,则>
创建模块
module AuditionConn
def self.included(base)
base.class_eval do
if Rails.env == 'development'
establish_connection "audition-development" # database.yml
else
establish_connection "audition-production" # database.yml
end
end
end
end
然后将其包含在要从/向试听数据库读取/写入的任何模型中>
class AuditionDBModel < ActiveRecord::Base
include AuditionConn
end
第二数据库的迁移
def up
AuditionDBModel.connection.create_table ... do |t|
...
AuditionDBModel.connection.change_column ...
end
我认为这可能对您有帮助:
class AuditModel < ActiveRecord::Base
connects_to database: { writing: :audit_db, reading: :your_db}
end
或
ActiveRecord::Base.establish_connection(
adapter: "mysql2",
host: "localhost",
username: "myuser",
password: "mypass",
database: "somedatabase"
)
有关详细信息:https://guides.rubyonrails.org/active_record_multiple_databases.htmlhttps://edgeapi.rubyonrails.org/classes/ActiveRecord/ConnectionHandling.html
我认为这可能对您有帮助: