2011-07-13 58 views
6

我有一個簡單的Rails應用程序部署到Heroku Cedar堆棧。Heroku Cedar - 沒有用於裝載Resque前端的靜態資產

應用程序使用Resque和Resque西納特拉前端應用程序安裝,所以我可以監控隊列:

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

這個偉大的工程,但在部署到Heroku上,該Resque front-end's CSS & JavaScript不被提供。

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 

我怎樣才能得到它爲這些資產?

回答

6

嘗試刪除路線並在您的config.ru中安裝應用程序。我使用的線沿線的東西:

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

run Rack::URLMap.new(
    "/" => Rails.application, 
    "/resque" => Resque::Server.new 
) 
+0

謝謝ezki,作品一種享受。 – zefer

+2

不適合我。 – Simpleton

0

我認爲在部署到heroku時需要設置根路徑。例如,我在config.ru指定

require './app' 
run ExampleApp 

,並設置根app.rb從而引導西納特拉應用:

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

這解決了在西納特拉的應用程序沒有提供與靜態資產的問題,爲了我。 對於resque,也許你可以擴展類,然後掛載它,設置根目錄?

+0

感謝tiredpixel,很高興知道這個未來的選擇。 – zefer

5

同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 
+1

謝謝凱恩,很好的建議。然而,我決定保留在我的resque.rb初始化程序中定義的身份驗證,如下所示: '#在resque前端使用基本身份驗證 Resque :: Server.use(Rack :: Auth :: Basic)做|用戶,密碼| 密碼==「secret」 end' – zefer

0

的Heroku雪松堆棧和救援需要這行代碼,以防止數據庫連接失敗。

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" 

希望這可以幫助別人,因爲它爲我做了儘可能多的。