Rails租户模式切换,后台作业无效

时间:2017-12-13 13:57:35

标签: ruby-on-rails ruby rails-postgresql

使用Whenever gem设置计划的rake任务。 需要切换到特定架构(在我的项目中使用Apartment gem)

config / schedule.rb中的代码

env :PATH, ENV['PATH']
env :GEM_PATH, ENV['GEM_PATH']
set :output, "#{Whenever.path}/log/scheduler.log"
every 1.minute do
  rake "db:my_task"
end

lib / tasks / my_task.rake中的代码

namespace :db do
  task :my_task => :environment do
    Apartment::Tenant.switch("subdomain") do
       #My Code here
    end
  end
end

在log log / scheduler.logs

中生成以下错误
  rake aborted!
  Apartment::TenantNotFound: One of the following schema(s) is invalid: "subdomain" "public"
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/postgresql_adapter.rb:72:in `rescue in connect_to_new'
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/postgresql_adapter.rb:65:in `connect_to_new'
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:91:in `block in switch!'
/var/lib/gems/2.3.0/gems/activesupport-5.1.3/lib/active_support/callbacks.rb:97:in `run_callbacks'
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:88:in `switch!'
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:105:in `switch'
/home/user1/Desktop/SPERICORN/kidversity/lib/tasks/dynamic_age_setter.rake:4:in `block (2 levels) in <top (required)>'
/var/lib/gems/2.3.0/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
ActiveRecord::StatementInvalid: Could not find schema kochi
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/postgresql_adapter.rb:66:in `connect_to_new'
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:91:in `block in switch!'
/var/lib/gems/2.3.0/gems/activesupport-5.1.3/lib/active_support/callbacks.rb:97:in `run_callbacks'
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:88:in `switch!'
/var/lib/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:105:in `switch'
/home/user1/Desktop/SPERICORN/kidversity/lib/tasks/dynamic_age_setter.rake:4:in `block (2 levels) in <top (required)>'
/var/lib/gems/2.3.0/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:dynamic_age_setter
(See full trace by running task with --trace)

1 个答案:

答案 0 :(得分:0)

你缺少ActiveRecord :: Base.establish_connection.connection试试这个 示例代码如下:

print(eval('a' + '.' + b + '(target)'))  # >>> 3

desc&#39;更新数据&#39;

任务email_normalize_to_downcase ::环境     create_connection_with_db     !公寓:: Tenant.switch(&#39;应用&#39)

namespace :debtor_email_data_fix do

任务全部:[:email_normalize_to_downcase]做   端

私有

def create_connection_with_db     的ActiveRecord :: Base.establish_connection.connection   结束 端