Rails守护程序保持在开发模式

时间:2009-03-18 22:32:31

标签: ruby-on-rails daemon

我有一个带有守护程序的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和开发数据库配置。

思考?建议?

由于

3 个答案:

答案 0 :(得分:3)

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

RAILS_ENV=production script/mail_fetcher start

答案 1 :(得分:1)

所以当你说

RAILS_ENV=production; script/mail_fetcher start
你是说

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

答案 2 :(得分:0)

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

ENV['RAILS_ENV'] = "production"

或者,可以将它添加到命令行。

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