Rails Daemon permanece en modo de desarrollo
-
20-08-2019 - |
Pregunta
Tengo una aplicación Rails con un daemon que revisa un buzón en busca de nuevos correos electrónicos. Estoy utilizando el complemento Fetcher para esta tarea. El archivo daemon se ve así:
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/environment.rb'
class MailFetcherDaemon < Daemon::Base
@config = YAML.load_file("#{RAILS_ROOT}/config/mail.yml")
@config = @config['production'].to_options
@sleep_time = @config.delete(:sleep_time) || 20
def self.start
puts "Starting MailFetcherDaemon"
# Add your own receiver object below
@fetcher = Fetcher.create({:receiver => MailProcessor}.merge(@config))
...
Así que tengo que tomar los nuevos correos electrónicos, analizarlos y crear un recurso a partir de los datos analizados. Pero cuando intenta guardar el recurso, se produce una excepción. Esto se debe a que el script se asigna automáticamente al entorno de desarrollo. Entonces, está usando la configuración de mi base de datos de desarrollo en lugar del entorno de producción (que es la configuración que quiero).
He intentado iniciar el script con:
rails-root$ RAILS_ENV=production; script/mail_fetcher start
pero fue en vano. Parece que cuando cargo el archivo environment.rb simplemente se establece de manera predeterminada en el entorno de desarrollo y carga development.rb y la configuración de la base de datos de desarrollo desde database.yml.
Pensamientos? ¿Sugerencias?
Gracias
Solución
Esto está funcionando en mi aplicación, la única diferencia que veo es que no hay punto y coma
RAILS_ENV=production script/mail_fetcher start
Otros consejos
Entonces cuando dices
RAILS_ENV=production; script/mail_fetcher start
quieres decir
#!/bin/bash
export RAILS_ENV=production
cd /path/to/rails_root
./script/mail_fetcher start
Puede intentar agregar esto a su script:
ENV['RAILS_ENV'] = "production"
Alternativamente, podría funcionar agregarlo a la línea de comando.
#!/bin/bash
cd /path/to/rails_root
./script/mail_fetcher start RAILS_ENV=production