首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只在rake任务完成后才运行mailer

只在rake任务完成后才运行mailer
EN

Stack Overflow用户
提问于 2019-03-13 14:34:55
回答 1查看 54关注 0票数 0

只有当rake任务没有运行时,我才想运行我的mailer。如果我同时运行这两个api,则会对其进行节流。

因此,我试图在我的OrderMailer上的方法中定义一个变量,并观察该变量上的true值,但我似乎无法让它工作。

到目前为止,这是我的代码:

代码语言:javascript
复制
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

然后我的示例rake任务:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 14:47:44

除非您在与邮件程序相同的Ruby机器中执行rake (我对此表示怀疑),否则它们不会共享环境,即使您试图使用全局变量(设置局部变量在任何情况下都没有任何效果,即使在rake中的最后两个方法中--它们是不同的变量)。

您需要的是编写.pid文件并检查它在文件系统中的存在,或者使用任何其他外部真实源,比如redis,甚至DB

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55144420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档