2009-03-18 7 views
1

J'ai une application Rails avec un démon qui vérifie la présence d'un nouveau message dans une boîte aux lettres. J'utilise le plugin Fetcher pour cette tâche. Le fichier démon ressemble à ceci:Rails Daemon reste en mode développement

#!/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)) 
    ... 

donc je l'ai saisir les nouveaux e-mails, les analyser et de créer une ressource à partir des données analysées. Mais quand il essaie de sauvegarder la ressource, une exception est levée. En effet, le script est automatiquement affecté à l'environnement de développement. Donc, il utilise ma configuration de base de données de développement au lieu de l'environnement de production (qui est la configuration que je veux).

J'ai essayé de démarrer le script avec:

rails-root$ RAILS_ENV=production; script/mail_fetcher start 

mais en vain. Il semble que lorsque je charge le fichier environment.rb, il utilise par défaut l'environnement de développement et charge le fichier development.rb ainsi que la configuration de la base de données de développement à partir de database.yml.

Pensées? Suggestions?

Merci

Répondre

3

Cela fonctionne dans mon application, la seule différence que je vois est pas point-virgule

RAILS_ENV=production script/mail_fetcher start 
1

Alors, quand vous dites

RAILS_ENV=production; script/mail_fetcher start 

voulez-vous dire

#!/bin/bash 
export RAILS_ENV=production 
cd /path/to/rails_root 
./script/mail_fetcher start 
+0

Ouais c'est la commande que je faisais, mais je l'avais en sténographie. J'ai mis à jour la question pour indiquer où j'exécutais la commande. – vrish88

0

Vous pouvez essayer d'ajouter ceci à votre script:

ENV['RAILS_ENV'] = "production" 

Alternativement, il pourrait travailler pour ajouter i t à la ligne de commande.

#!/bin/bash 
cd /path/to/rails_root 
./script/mail_fetcher start RAILS_ENV=production 
+0

J'ai essayé mais j'ai besoin que l'environnement soit défini sur 'production' car le fichier environment.rb est chargé de cette façon il chargera la configuration de production (les paramètres pour la base de données, mailier, logger, etc.) – vrish88

Questions connexes