Heroku Cedar - 没有安装Resque前端的静态资产

时间:2011-07-13 16:29:12

标签: ruby-on-rails ruby heroku resque

我有一个简单的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

我怎样才能让它为这些资产提供服务?

4 个答案:

答案 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"

希望这对某人有所帮助,就像对我一样。