2011-07-13 22 views
6

Tôi có một ứng dụng Rails đơn giản được triển khai cho ngăn xếp Heroku Cedar.Heroku Cedar - không có tài sản tĩnh để gắn Resque front-end

Ứng dụng sử dụng Resque và ứng dụng front-end Resque Sinatra được gắn để tôi có thể theo dõi hàng đợi:

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

này hoạt động tuyệt vời, nhưng khi triển khai tới Heroku, các Resque front-end's CSS & JavaScript không được phục vụ.

Một đoạn ghi Heroku của chỉ nó trở về zero byte:

... 
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 

Làm thế nào tôi có thể lấy nó để phục vụ các tài sản này?

Trả lời

6

Thử xóa tuyến đường và lắp ứng dụng vào config.ru của bạn. Tôi đang sử dụng một cái gì đó dọc theo dòng:

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

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

Cảm ơn ezki, làm việc một điều trị. – zefer

+2

Không làm việc cho tôi. – Simpleton

0

Tôi tin rằng cần thiết để thiết lập đường dẫn gốc, khi triển khai đến heroku. Ví dụ, tôi khởi động một ứng dụng Sinatra bằng cách xác định

require './app' 
run ExampleApp 

trong config.ru, và thiết lập gốc trong app.rb như sau:

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

Đó giải quyết vấn đề tài sản tĩnh không được phục vụ trong một ứng dụng Sinatra, cho tôi. Để đặt lại, có lẽ bạn có thể mở rộng lớp và gắn kết thay vào đó, đặt gốc?

+0

Cảm ơn mệt mỏi, bạn nên biết tùy chọn này cho tương lai. – zefer

5

Tương tự như ezkl nhưng mật khẩu bảo vệ, làm việc cho tôi:

# 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

Cảm ơn kain, gợi ý tốt. Tuy nhiên, tôi quyết định giữ xác thực của mình được xác định trong trình khởi tạo resque.rb của mình, giống như sau: '# sử dụng auth cơ bản trên giao diện người dùng Resque :: Server.use (Rack :: Auth :: Basic) do | user, password | mật khẩu == "bí mật" kết thúc' – zefer

0

Heroku Cedar stack và cứu hộ cần dòng mã này để ngăn chặn thất bại kết nối cơ sở dữ liệu .

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

Trên mã nên được đặt trong: /lib/tasks/resque.rake

Ví dụ:

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" 

Hope this helps một ai đó, nhiều như nó đã làm cho tôi.

Các vấn đề liên quan