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

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top