1

我有一个带有守护进程的 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 文件时,它只是默认为开发环境并从 database.yml 加载 development.rb 和开发数据库配置。

想法?建议?

谢谢

4

3 回答 3

3

这在我的应用程序中有效,我看到的唯一区别是没有分号

RAILS_ENV=production script/mail_fetcher start
于 2009-10-14T02:08:25.587 回答
1

所以当你说

RAILS_ENV=production; script/mail_fetcher start

你的意思是

#!/bin/bash
export RAILS_ENV=production
cd /path/to/rails_root
./script/mail_fetcher start
于 2009-03-18T22:58:26.320 回答
0

您可以尝试将其添加到您的脚本中:

ENV['RAILS_ENV'] = "production"

或者,将其添加到命令行可能会起作用。

#!/bin/bash
cd /path/to/rails_root
./script/mail_fetcher start RAILS_ENV=production
于 2009-03-19T01:02:26.880 回答