【问题标题】:Rails Daemon stays in development modeRails 守护进程处于开发模式
【发布时间】:2010-10-14 04:57:54
【问题描述】:

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

想法?有什么建议吗?

谢谢

【问题讨论】:

    标签: ruby-on-rails daemon


    【解决方案1】:

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

    RAILS_ENV=production script/mail_fetcher start
    

    【讨论】:

      【解决方案2】:

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

      ENV['RAILS_ENV'] = "production"
      

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

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

      【讨论】:

      • 我试过了,但我需要将环境设置为“生产”,因为 environment.rb 文件以这种方式加载,它将加载生产配置(数据库、邮件程序、记录器的设置,等)
      【解决方案3】:

      所以当你说

      RAILS_ENV=production; script/mail_fetcher start
      

      你是说

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

      【讨论】:

      • 是的,这就是我正在执行的命令,但我有它的简写形式。我更新了问题以指示我从哪里运行命令。
      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2023-03-10
      • 2011-05-09
      • 2013-02-04
      • 1970-01-01
      相关资源
      最近更新 更多