Rails Daemon остается в режиме разработки - PullRequest
1 голос
/ 19 марта 2009

У меня есть приложение Rails с демоном, который проверяет почтовый ящик на наличие новых сообщений. Я использую плагин Fetcher для этой задачи. Файл демона выглядит так:

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

Итак, я могу взять новые письма, проанализировать их и создать ресурс из проанализированных данных. Но когда он пытается сохранить ресурс, генерируется исключение. Это связано с тем, что сценарию автоматически назначается среда разработки. Поэтому он использует мою конфигурацию базы данных разработки вместо производственной среды (которая мне нужна).

Я попытался запустить скрипт с:

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

но безрезультатно. Кажется, что когда я загружаю файл environment.rb, он по умолчанию устанавливается в среду разработки и загружает development.rb и конфигурацию базы данных разработки из database.yml.

Мысли? Предложения?

Спасибо

Ответы [ 3 ]

3 голосов
/ 14 октября 2009

Это работает в моем приложении, единственное отличие, которое я вижу, это не точка с запятой

RAILS_ENV=production script/mail_fetcher start
1 голос
/ 19 марта 2009

Итак, когда вы говорите

RAILS_ENV=production; script/mail_fetcher start

Вы имеете в виду

#!/bin/bash
export RAILS_ENV=production
cd /path/to/rails_root
./script/mail_fetcher start
0 голосов
/ 19 марта 2009

Вы можете попробовать добавить это в ваш скрипт:

ENV['RAILS_ENV'] = "production"

В качестве альтернативы, это может помочь добавить его в командную строку.

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