Heroku Cedar - нет статических ресурсов для смонтированного внешнего интерфейса Resque - PullRequest
6 голосов
/ 13 июля 2011

У меня есть простое приложение Rails, развернутое в стеке Heroku Cedar.

Приложение использует Resque, а внешнее приложение Resque Sinatra смонтировано, поэтому я могу отслеживать очередь:

# routes.rb
...
mount Resque::Server, :at => "/resque"

Это прекрасно работает, но при развертывании в Heroku CSS & JavaScript интерфейса Resque не обслуживаются.

Фрагмент логов Heroku указывает, что он возвращает нулевые байты:

...
2011-07-13T16:19:35+00:00 heroku[router]: GET myapp.herokuapp.com/resque/style.css dyno=web.1 queue=0 wait=0ms service=3ms status=200 bytes=0
2011-07-13T16:19:35+00:00 app[web.1]: 
2011-07-13T16:19:35+00:00 app[web.1]: 
2011-07-13T16:19:35+00:00 app[web.1]: Started GET "/resque/style.css" for 87.xx.xx.xx at 2011-07-13 16:19:35 +0000
2011-07-13T16:19:35+00:00 app[web.1]: cache: [GET /resque/style.css] miss

Как я могу заставить его обслуживать эти активы?

Ответы [ 4 ]

6 голосов
/ 14 июля 2011

Попробуйте удалить маршрут и смонтировать приложение в вашем config.ru. Я использую что-то вроде:

require ::File.expand_path('../config/environment',  __FILE__)
require 'resque/server'

run Rack::URLMap.new(
    "/" => Rails.application,
    "/resque" => Resque::Server.new 
)
5 голосов
/ 14 июля 2011

То же, что и ezkl, но защищено паролем, у меня работает:

# config.ru
# This file is used by Rack-based servers to start the application.

require ::File.expand_path('../config/environment',  __FILE__)
require 'resque/server'

# Set the AUTH env variable to your basic auth password to protect Resque.
AUTH_PASSWORD = ENV['RESQUE_PASSWORD']
if AUTH_PASSWORD
  Resque::Server.use Rack::Auth::Basic do |username, password|
    password == AUTH_PASSWORD
  end
end

run Rack::URLMap.new \
  '/'       => MyApp::Application,
  '/resque' => Resque::Server.new
0 голосов
/ 06 марта 2012

HEROKU Cedar Stack и Rescue нужна эта строка кода для предотвращения сбоя соединения с базой данных.

Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }

Над кодом следует указывать: /lib/tasks/resque.rake

Например:

require 'resque/tasks'

task "resque:setup" => :environment do
  ENV['QUEUE'] = '*'

  Resque.after_fork do |job|
    ActiveRecord::Base.establish_connection
  end

end

desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => "resque:work"

Надеюсь, это поможет кому-то, так же, как и мне.

0 голосов
/ 14 июля 2011

Я считаю, что необходимо установить корневой путь при развертывании на героку.Например, я загружаю приложение sinatra, указав

require './app'
run ExampleApp

в config.ru и установив корень в app.rb таким образом:

class ExampleApp < Sinatra::Base
  set :root, File.dirname(__FILE__)
end

Это решает проблему статических активовне служил в заявлении синатры, для меня.Для resque, возможно, вы можете расширить класс и смонтировать его, установив root?

...