【问题标题】:How to configure Resque on Heroku with Rails 3.1 and the asset pipeline如何使用 Rails 3.1 和资产管道在 Heroku 上配置 Resque
【发布时间】:2012-03-30 13:37:52
【问题描述】:

安装 Resque gem 并运行工作程序后,我的应用程序现在会产生资产管道错误:

Sass:SyntaxError: 找不到或无法读取要导入的文件

我创建了一个新分支并将问题缩小到运行 Resque 工作程序。我只更改了三个文件。以下是重现的步骤:

1) 将 Resque gem 添加到 Gemfile:

gem 'resque'

2) 创建一个 Resque rake 任务:

# lib/resque.rake

require 'resque/tasks'

task "resque:setup" => :environment do
    ENV['QUEUE'] = '*'
    Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }
end

3) 向 Procfile 添加一个 worker:

web: bundle exec rails server -p $PORT thin
worker: bundle exec rake resque:work

我感觉问题在于工人正在尝试加载我的所有资产。我不想要,因为它只是一个后台进程。我什至没有运行 Resque 前端,所以问题与此无关。

【问题讨论】:

  • config.assets.initialize_on_precompile 是否设置为 false?

标签: ruby-on-rails-3.1 heroku asset-pipeline resque


【解决方案1】:

罪魁祸首实际上是在我的 Resque 初始化程序中:

if Rails.env.staging? || Rails.env.production?
  uri = URI.parse ENV['REDISTOGO_URL']
  Resque.redis = Redis.new :host => uri.host, :port => uri.port, :password => uri.password
end

Heroku 在 slug 编译期间运行 assets:precompile。在预编译期间会加载环境,但 Heroku 不会传入 ENV 变量。由于

,URI 解析行失败
ENV['REDISTOGO_URL'] 

为零。这导致 assets:precompile rake 任务失败。

解决方法是添加:

config.assets.initialize_on_precompile = false 

到您的 application.rb 文件。

这在 Rails 3.1.1 中可用,当设置为 false 时,编译资产时将不再加载环境。大多数时候这是一个安全的选择。

感谢尼尔为我指明了正确的方向。

【讨论】:

    【解决方案2】:

    在 Rails 4 中,initialize_on_precompile 选项已弃用。

    我在使用 Rails 4 应用程序时遇到了同样的问题,并决定如果未设置 REDISTOGO_URL 配置变量(例如,在 assets:precompile 期间),则无需创建 Redis 连接。所以我改变了我的redis.rb:

    if ENV.include?('REDISTOGO_URL')
      uri = URI.parse(ENV["REDISTOGO_URL"])
      REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多