Запускать почтовую программу только после того, как задача рейка завершена - PullRequest
0 голосов
/ 13 марта 2019

Я хочу запустить мой mailer, только если моя задача rake НЕ запущена. Если я запускаю оба, 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

1 Ответ

2 голосов
/ 13 марта 2019

Если вы не выполните rake изнутри той же машины Ruby, что и ваша почтовая программа (в чем я сомневаюсь), они не разделяют окружение, даже если вы пытались использовать глобальную переменную (установка локальных переменных не имеет никакого эффекта вообще в любом случае, даже внутри ваших последних двух методов в rake это разные переменные .)

Вам нужно написать .pid файл и проверить его наличие в файловой системе или использовать любой другой внешний источник правды, например redis или даже DB.

...