安装 Resque gem 并运行工作程序后,我的应用程序现在会产生 Assets 管道错误:
Sass:SyntaxError: 要导入的文件未找到或无法读取
我创建了一个新分支并将问题缩小到运行 Resque 工作器。我只更改了三个文件。以下是重现的步骤:
1) 将 Resque gem 添加到 Gemfile:
gem 'resque'
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
3)在Procfile中添加一个worker:
web: bundle exec rails server -p $PORT thin
worker: bundle exec rake resque:work
我有一种感觉,问题在于工作人员正在尝试加载我的所有 Assets 。我不想要,因为它只是一个后台进程。我什至没有运行 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
Heroku 在 slug 编译期间运行 assets:precompile。在预编译期间,环境已加载,但 Heroku 不会传入 ENV 变量。由于 URI 解析行失败
ENV['REDISTOGO_URL']
为零。这导致 assets:precompile rake 任务失败。
解决方法是添加:
config.assets.initialize_on_precompile = false
到您的 application.rb 文件。
这在 Rails 3.1.1 中可用,当设置为 false 时,编译 Assets 时将不再加载环境。大多数情况下,这是一个安全的选择。
感谢尼尔为我指明了正确的方向。
关于ruby-on-rails-3.1 - 如何使用 Rails 3.1 和 Assets 管道在 Heroku 上配置 Resque,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944089/