如何在 Rails 没有 ActiveRecord(使用 Mongoid)的情况下使用 ActiveJob(Resque Adapter)
How to use ActiveJob (Resque Adapter) with Rails no ActiveRecord (using Mongoid)
我一直在将 Mongoid Adapter 与 Rails 一起用于应用程序。所以我基本上将项目设置为不使用 ActiveRecord(因为我还将把它部署到 Heroku)。我遵循了一个教程,它对我有用:
Remove database adapter gems from your Gemfile, e.g., mysql2, sqlite3, etc
From application.rb, remove require 'rails/all' and add
require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
Delete database.yml, schema.rb and all the migrations
Delete migration checks from test/test_helper.rb
Delete all activerecord related configuration from config/environments
但是,现在 - 由于我正在优化我的 Web 应用程序中的流程(导入 csv 流程),我决定使用 ActiveJob + Resque 来使用延迟作业。
我知道 Resque 需要 Redis,所以我安装了它和 运行 服务器,但是 Resque 的 rake 任务设置如下所示:
require 'resque/tasks'
task "resque:setup" => :environment do
Resque.before_fork = Proc.new do |job|
ActiveRecord::Base.connection.disconnect!
end
Resque.after_fork = Proc.new do |job|
ActiveRecord::Base.establish_connection
end
end
似乎需要ActiveRecord 来完成它的工作(当然是因为它映射到redis 数据库)。当我 运行 这个时,毫不奇怪:
LOGGING=1 QUEUE=* bundle exec rake resque:work
它喷出一个错误(因为缺少 ActiveRecord):
*** Failed to start worker : #<NameError: uninitialized constant ActiveRecord>
如何进行这项工作?
我知道不久前有人问过这个问题,但这里的答案是您可以使用自己的 resque.rake
安全地删除 before/after 工作进程
这是我的:
#lib/tasks/resque.rake
require 'resque/tasks'
require 'resque/scheduler/tasks'
namespace :resque do
task setup: :setup_logger do #setup logger includes environment!
require 'resque'
require 'resque-scheduler'
end
end
#Sets up logging - should only be called from other rake tasks
task setup_logger: :environment do
logger = Logger.new(STDOUT)
logger.level = Logger.const_get((ENV["LOG_LEVEL"] || "DEBUG").upcase)
Rails.logger = logger
end
我一直在将 Mongoid Adapter 与 Rails 一起用于应用程序。所以我基本上将项目设置为不使用 ActiveRecord(因为我还将把它部署到 Heroku)。我遵循了一个教程,它对我有用:
Remove database adapter gems from your Gemfile, e.g., mysql2, sqlite3, etc
From application.rb, remove require 'rails/all' and add
require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
Delete database.yml, schema.rb and all the migrations
Delete migration checks from test/test_helper.rb
Delete all activerecord related configuration from config/environments
但是,现在 - 由于我正在优化我的 Web 应用程序中的流程(导入 csv 流程),我决定使用 ActiveJob + Resque 来使用延迟作业。
我知道 Resque 需要 Redis,所以我安装了它和 运行 服务器,但是 Resque 的 rake 任务设置如下所示:
require 'resque/tasks'
task "resque:setup" => :environment do
Resque.before_fork = Proc.new do |job|
ActiveRecord::Base.connection.disconnect!
end
Resque.after_fork = Proc.new do |job|
ActiveRecord::Base.establish_connection
end
end
似乎需要ActiveRecord 来完成它的工作(当然是因为它映射到redis 数据库)。当我 运行 这个时,毫不奇怪:
LOGGING=1 QUEUE=* bundle exec rake resque:work
它喷出一个错误(因为缺少 ActiveRecord):
*** Failed to start worker : #<NameError: uninitialized constant ActiveRecord>
如何进行这项工作?
我知道不久前有人问过这个问题,但这里的答案是您可以使用自己的 resque.rake
安全地删除 before/after 工作进程这是我的:
#lib/tasks/resque.rake
require 'resque/tasks'
require 'resque/scheduler/tasks'
namespace :resque do
task setup: :setup_logger do #setup logger includes environment!
require 'resque'
require 'resque-scheduler'
end
end
#Sets up logging - should only be called from other rake tasks
task setup_logger: :environment do
logger = Logger.new(STDOUT)
logger.level = Logger.const_get((ENV["LOG_LEVEL"] || "DEBUG").upcase)
Rails.logger = logger
end