Как настроить Resque на Heroku с Rails 3.1 и конвейером ресурсов - PullRequest
4 голосов
/ 30 марта 2012

После установки гема Resque и запуска работника мое приложение теперь выдает ошибку конвейера активов:

Sass: SyntaxError: Файл для импорта не найден или не читается

Я создал новую ветку исузил проблему до запуска работника Resque.Я только изменил три файла.Вот шаги для воспроизведения:

1) Добавьте драгоценный камень Resque в Gemfile:

gem 'resque'

2) Создайте грабли Resque:

# 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:

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

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

Ответы [ 2 ]

5 голосов
/ 02 апреля 2012

Виновник был на самом деле в моем инициализаторе 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 запускает ресурсы: прекомпилируется во время компиляции слагов.Во время прекомпиляции среда загружается, но Heroku не проходит в ENV.Строка разбора URI не выполнена из-за того, что

ENV['REDISTOGO_URL'] 

равно нулю.Это приводило к сбою rake-задачи assets: precompile.

Решение заключается в добавлении:

config.assets.initialize_on_precompile = false 

в файл application.rb.

Это доступно с Rails 3.1.1, и когда установлено значение false, среда больше не будет загружаться при компиляции ресурсов.В большинстве случаев это безопасный выбор.

Спасибо, Нил, за то, что указал мне правильное направление.

0 голосов
/ 18 декабря 2013

В Rails 4 опция initialize_on_precompile устарела.

У меня возникла та же проблема с приложением Rails 4, и я решил, что нет необходимости создавать соединение Redis, если не задана конфигурация REDISTOGO_URL varНапример, во время активов: прекомпиляция).Поэтому я изменил свой 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
...