运行 仅在 rake 任务完成后才发送邮件
Run mailer only after rake task is finished
如果我的抽佣任务不是 运行ning,我只想 运行 我的 mailer
。如果我 运行 api 都被限制了。
所以我试图在 OrderMailer
的方法中定义一个变量,然后只观察该变量的 true
值,但我似乎无法让它工作.
到目前为止,这是我的代码:
class OrderMailer < ActionMailer::Base
default from: 'todd@gmail.com'
attr_reader :sheet
attr_accessor :amazon_api_is_free
def order_report
Rails.logger.info"Is the api free? #{amazon_api_is_free}"
sleep(30) until amazon_api_is_free
shops = Shop.where(subscribed: true, setup: true)
shops.each do |shop|
@sheet = OrderReport.new(shop)
@sheet.create_order_workbook
# get_data_for_inside_email
time = Time.now
if File.exist?("problem_orders_#{shop.id}.xlsx")
mail(to: "todd@gmail.com",
subject: "FBA Shipping Report for #{time.strftime("%B %d")}").attachments["problem_orders_#{shop.id}.xlsx"] = File.read("problem_orders_#{shop.id}.xlsx")
# mail(to: "todd.trimakas@gmail.com", subject: "FBA Shipping Report for #{time.strftime("%B %d")}")
end
end
end
def self.is_amazon_api_available
@amazon_api_is_free
end
然后是我的抽取任务示例:
desc 'Passing the buck'
task :just_a_test => :environment do
puts "testing"
start
end
def start
not_available
pp "From the rake is the api free? #{OrderMailer.is_amazon_api_available}"
pp "making sure its running"
sleep(20)
available
end
def not_available
is_amazon_api_available = false
end
def available
is_amazon_api_available = true
end
除非您从与邮件程序相同的 Ruby 机器内部执行 rake
(我对此表示怀疑),否则它们不会共享环境,即使您尝试使用全局变量 (在任何情况下,设置局部变量的效果都为零,即使在 rake
中的最后两个方法中也是 不同的变量 。)
您需要的是编写 .pid
文件并检查它是否存在于文件系统中,或者使用任何其他外部真实来源,例如 redis
,甚至 DB
。
如果我的抽佣任务不是 运行ning,我只想 运行 我的 mailer
。如果我 运行 api 都被限制了。
所以我试图在 OrderMailer
的方法中定义一个变量,然后只观察该变量的 true
值,但我似乎无法让它工作.
到目前为止,这是我的代码:
class OrderMailer < ActionMailer::Base
default from: 'todd@gmail.com'
attr_reader :sheet
attr_accessor :amazon_api_is_free
def order_report
Rails.logger.info"Is the api free? #{amazon_api_is_free}"
sleep(30) until amazon_api_is_free
shops = Shop.where(subscribed: true, setup: true)
shops.each do |shop|
@sheet = OrderReport.new(shop)
@sheet.create_order_workbook
# get_data_for_inside_email
time = Time.now
if File.exist?("problem_orders_#{shop.id}.xlsx")
mail(to: "todd@gmail.com",
subject: "FBA Shipping Report for #{time.strftime("%B %d")}").attachments["problem_orders_#{shop.id}.xlsx"] = File.read("problem_orders_#{shop.id}.xlsx")
# mail(to: "todd.trimakas@gmail.com", subject: "FBA Shipping Report for #{time.strftime("%B %d")}")
end
end
end
def self.is_amazon_api_available
@amazon_api_is_free
end
然后是我的抽取任务示例:
desc 'Passing the buck'
task :just_a_test => :environment do
puts "testing"
start
end
def start
not_available
pp "From the rake is the api free? #{OrderMailer.is_amazon_api_available}"
pp "making sure its running"
sleep(20)
available
end
def not_available
is_amazon_api_available = false
end
def available
is_amazon_api_available = true
end
除非您从与邮件程序相同的 Ruby 机器内部执行 rake
(我对此表示怀疑),否则它们不会共享环境,即使您尝试使用全局变量 (在任何情况下,设置局部变量的效果都为零,即使在 rake
中的最后两个方法中也是 不同的变量 。)
您需要的是编写 .pid
文件并检查它是否存在于文件系统中,或者使用任何其他外部真实来源,例如 redis
,甚至 DB
。