Sea*_*ker 4 heroku resque ruby-on-rails-3.1 asset-pipeline
安装Resque gem并运行worker后,我的app现在会产生资产管道错误:
Sass:SyntaxError:要导入的文件未找到或不可读
我创建了一个新的分支,并将问题缩小到运行Resque工作者.我只改变了三个文件.以下是重现的步骤:
1)将Resque gem添加到Gemfile:
gem 'resque'
Run Code Online (Sandbox Code Playgroud)
2)创建Resque rake任务:
# lib/resque.rake
require 'resque/tasks'
task "resque:setup" => :environment do
ENV['QUEUE'] = '*'
Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection }
end
Run Code Online (Sandbox Code Playgroud)
3)将一个worker添加到Procfile:
web: bundle exec rails server -p $PORT thin
worker: bundle exec rake resque:work
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,问题是工人正试图加载我的所有资产.这是我不想要的,因为它只是一个后台进程.我甚至没有运行Resque前端,所以问题与此无关.
罪魁祸首实际上是在我的Resque初始化程序中:
if Rails.env.staging? || Rails.env.production?
uri = URI.parse ENV['REDISTOGO_URL']
Resque.redis = Redis.new :host => uri.host, :port => uri.port, :password => uri.password
end
Run Code Online (Sandbox Code Playgroud)
Heroku运行资产:在slug编译期间预编译.在预编译期间加载了环境,但是Heroku没有通过ENV变量.URI解析行由于失败而失败
ENV['REDISTOGO_URL']
Run Code Online (Sandbox Code Playgroud)
没有.这导致资产:预编译rake任务失败.
解决方案是添加:
config.assets.initialize_on_precompile = false
Run Code Online (Sandbox Code Playgroud)
到您的application.rb文件.
这在Rails 3.1.1中可用,当设置为false时,在编译资产时将不再加载环境.大多数时候这是一个安全的选择.
谢谢尼尔指出我正确的方向.
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |