ruby-on-rails-3.1 - 如何使用 Rails 3.1 和 Assets 管道在 Heroku 上配置 Resque

标签 ruby-on-rails-3.1 heroku asset-pipeline resque

安装 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/

相关文章:

ruby-on-rails - 通过异步设置键值对改进 Rails.cache.write

ruby-on-rails - 我如何调用 Rake 中的另一个任务

css - 在文件夹中组织 Rails SASS 文件

heroku - 为什么我不能部署在遗留堆栈 (bamboo) 上运行的 Rails 项目?

heroku - 如何在 Heroku 上使用 Prisma 2 CLI

ruby-on-rails - Rails 4 Assets 编译在开发模式下非常慢(>1 分钟)。如何排除故障?

ruby-on-rails - Rails 3.1 ckeditor

ruby-on-rails - 通过has_many与多个数据库连接

javascript - 如何在 Rails Asset Pipeline 中共享不同的 CoffeeScript 文件中的代码

jquery - 使用bootstrap获得简单的 slider ,Rails4 Assets 问题?