6

単純なRailsアプリをHerokuCedarスタックにデプロイしています。

アプリはResqueを使用し、Resque Sinatraフロントエンドアプリがマウントされているため、キューを監視できます。

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

これはうまく機能しますが、Herokuにデプロイすると、Resqueフロントエンドの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

4 に答える 4

6

ルートを削除して、アプリをにマウントしてみてくださいconfig.ru。私は次のようなものを使用しています:

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

run Rack::URLMap.new(
    "/" => Rails.application,
    "/resque" => Resque::Server.new 
)
于 2011-07-13T22:51:38.770 に答える
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
于 2011-07-14T03:14:20.347 に答える
0

herokuにデプロイするときは、ルートパスを設定する必要があると思います。たとえば、sinatraアプリケーションを次のように指定して起動します

require './app'
run ExampleApp

config.ru、ルートを次のように設定しapp.rbます。

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

これにより、静的アセットがsinatraアプリケーションで提供されないという問題が解決されます。resqueの場合、おそらくクラスを拡張してマウントし、代わりにルートを設定できますか?

于 2011-07-13T21:38:15.117 に答える
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"

これが私と同じように誰かに役立つことを願っています。

于 2012-03-06T16:30:12.330 に答える