我有一个简单的Rails应用程序部署到Heroku Cedar堆栈。
该应用程序使用Resque并安装了Resque Sinatra前端应用程序,以便我可以监控队列:
# 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
我怎样才能让它为这些资产提供服务?
答案 0 :(得分:6)
尝试删除路线并在config.ru
中安装应用。我正在使用以下内容:
require ::File.expand_path('../config/environment', __FILE__)
require 'resque/server'
run Rack::URLMap.new(
"/" => Rails.application,
"/resque" => Resque::Server.new
)
答案 1 :(得分: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
答案 2 :(得分:0)
我认为在部署到heroku时需要设置根路径。例如,我通过指定
来启动sinatra应用程序require './app'
run ExampleApp
<{1>}中的,并在config.ru
中设置根目录:
app.rb
对于我来说,这解决了静态资产无法在sinatra应用程序中提供的问题。 对于resque,也许你可以扩展类并安装它,而不是设置root?
答案 3 :(得分:0)
HEROKU Cedar堆栈和救援需要这行代码来防止数据库连接失败。
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"
希望这对某人有所帮助,就像对我一样。