Solid Queue 0.8.2 SQL格式下如何仅加载队列schema至指定开发库?
解决Solid Queue 0.8.2加载
queue_schema.rb到指定数据库的问题 方法一:直接用Ruby脚本加载(推荐)
由于你不需要在test环境使用队列,而官方命令会触发test环境的purge任务导致报错,最直接的方式是跳过Rails任务的环境依赖,手动加载schema:
- 在项目根目录创建
load_queue_schema.rb脚本,内容如下:
require_relative 'config/environment' # 切换到development环境的queue数据库连接 ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['development']['queue']) # 加载queue_schema.rb文件 load Rails.root.join('db/queue_schema.rb')
- 执行脚本完成加载:
bin/rails runner load_queue_schema.rb
方法二:临时配置test环境并执行官方命令
如果偏好使用官方提供的任务命令,可以临时给test环境添加空的queue数据库配置以避免报错:
- 修改
database.yml,在test环境下添加queue配置(执行后可删除):
test: primary: &primary_test <<: *default database: appa_test queue: <<: *primary_test database: appa_test_queue
- 指定development环境执行schema加载命令:
RAILS_ENV=development bin/rails db:schema:load:queue SCHEMA_FORMAT="ruby"
- 执行完成后,移除test环境的queue配置即可。
方法三:跳过test环境的purge任务
通过重写Rake任务,跳过触发报错的test环境purge步骤:
在lib/tasks目录下创建override_solid_queue_tasks.rake文件,内容如下:
Rake::Task["db:schema:load:queue"].clear_prerequisites Rake::Task["db:schema:load:queue"].enhance do ActiveRecord::Base.establish_connection(:queue) load Rails.root.join('db/queue_schema.rb') end
然后执行命令:
RAILS_ENV=development bin/rails db:schema:load:queue
内容的提问来源于stack exchange,提问作者Sig
相关产品推荐
相关产品推荐

