make rake db:create 设置除开发、测试或生产之外的另一个数据库
Posted
技术标签:
【中文标题】make rake db:create 设置除开发、测试或生产之外的另一个数据库【英文标题】:make rake db:create setup another database besides development, test or production 【发布时间】:2020-08-07 09:48:03 【问题描述】:我正在使用 rails 4.2 并尝试在 this second database approach 之后配置(在已建立的应用程序中)已审核的 Gem。
我的 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"] %>
注意试听数据库的新名称
【问题讨论】:
【参考方案1】:我认为这可能会对您有所帮助: 为审计创建另一个模型:
class AuditModel < ActiveRecord::Base
connects_to database: writing: :audit_db, reading: :audit_db
end
或
ActiveRecord::Base.establish_connection(
adapter: "mysql2",
host: "localhost",
username: "myuser",
password: "mypass",
database: "somedatabase"
)
详情: https://guides.rubyonrails.org/active_record_multiple_databases.html https://edgeapi.rubyonrails.org/classes/ActiveRecord/ConnectionHandling.html
【讨论】:
【参考方案2】:如果你想在rails中读/写秒数据库
创建一个模块
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
【讨论】:
谢谢,这对迁移很有用。您对如何使 rake db:create/drop 自动为第二个数据库自动执行此步骤有任何想法吗?【参考方案3】:我想你想创建一个新环境调用audition
,对吧?!
config/environments/test.rb
并将其重命名为 config/environments/audition.rb
在 config/database.yml 中为您的环境添加一个新的配置块。
使用新环境更新 config 文件夹下的任何其他配置文件,一些 gem 需要对其进行配置。
现在可以启动服务器了
rails server -e audition
【讨论】:
不,我需要设置试听数据库,以便像指向链接中的方法一样使用。可以使用 rake db:create 与其他数据库一起创建的东西。 rake db:migrate 也是一样的 @intmarinoreturn0 尝试使用章鱼宝石github.com/thiagopradi/octopus 你可以在 octopus gem 上使用replication
,所有的写查询都会发送给 master,而 read 查询会发送给 slave
这是否意味着无法在我的第二个数据库上写入?在这种情况下,试镜之一。这不是经过审核的 gem 的目的以上是关于make rake db:create 设置除开发、测试或生产之外的另一个数据库的主要内容,如果未能解决你的问题,请参考以下文章
markdown rake db:createすると访问被拒绝用户が出る
尝试使用 Rails 创建数据库时出错,rake db:create
如何运行 db:migrate 从另一个带参数的 rake 任务?