Rails Daemon rimane in modalità di sviluppo
-
20-08-2019 - |
Domanda
Ho un'applicazione Rails con un demone che controlla una nuova casella di posta per eventuali nuove e-mail. Per questo compito sto usando il plug-in Fetcher . Il file demone è simile al seguente:
#!/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))
...
Quindi ho preso le nuove e-mail, analizzale e crea una risorsa dai dati analizzati. Ma quando tenta di salvare la risorsa viene generata un'eccezione. Questo perché allo script viene assegnato automaticamente l'ambiente di sviluppo. Quindi sta usando la mia configurazione del database di sviluppo anziché l'ambiente di produzione (che è la configurazione che desidero).
Ho provato ad avviare lo script con:
rails-root$ RAILS_ENV=production; script/mail_fetcher start
ma inutilmente. Sembra che quando carico il file environment.rb per impostazione predefinita sia l'ambiente di sviluppo e carichi development.rb e la configurazione del database di sviluppo da database.yml.
Pensieri? Suggerimenti?
Grazie
Soluzione
Funziona nella mia app, l'unica differenza che vedo non è punto e virgola
RAILS_ENV=production script/mail_fetcher start
Altri suggerimenti
Quindi quando dici
RAILS_ENV=production; script/mail_fetcher start
vuoi dire
#!/bin/bash
export RAILS_ENV=production
cd /path/to/rails_root
./script/mail_fetcher start
Potresti provare ad aggiungere questo al tuo script:
ENV['RAILS_ENV'] = "production"
In alternativa, potrebbe funzionare per aggiungerlo alla riga di comando.
#!/bin/bash
cd /path/to/rails_root
./script/mail_fetcher start RAILS_ENV=production