Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3.1 如何使用Rails 3.1和资产管道在Heroku上配置Resque_Ruby On Rails 3.1_Heroku_Asset Pipeline_Resque - Fatal编程技术网

Ruby on rails 3.1 如何使用Rails 3.1和资产管道在Heroku上配置Resque

Ruby on rails 3.1 如何使用Rails 3.1和资产管道在Heroku上配置Resque,ruby-on-rails-3.1,heroku,asset-pipeline,resque,Ruby On Rails 3.1,Heroku,Asset Pipeline,Resque,安装Resque gem并运行worker后,我的应用程序现在会产生一个资产管道错误: Sass:SyntaxError:找不到要导入的文件或文件不可读 我创建了一个新的分支,并将问题缩小到运行Resque worker。我只更改了三个文件。以下是复制的步骤: 1) 将Resque gem添加到gem文件: gem 'resque' 2) 创建一个Resque rake任务: # lib/resque.rake require 'resque/tasks' task "resque:set

安装Resque gem并运行worker后,我的应用程序现在会产生一个资产管道错误:

Sass:SyntaxError:找不到要导入的文件或文件不可读

我创建了一个新的分支,并将问题缩小到运行Resque worker。我只更改了三个文件。以下是复制的步骤:

1) 将Resque gem添加到gem文件:

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) 将工作程序添加到程序文件:

web: bundle exec rails server -p $PORT thin
worker: bundle exec rake resque:work

我有一种感觉,问题是工人试图加载我所有的资产。我不想这样,因为这只是一个后台过程。我甚至没有运行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不会传入环境变量。URI分析行由于以下原因失败:

ENV['REDISTOGO_URL'] 
零。这导致assets:precompilerake任务失败

解决方案是添加:

config.assets.initialize_on_precompile = false 
到application.rb文件

这在Rails 3.1.1中可用,当设置为false时,编译资产时将不再加载环境。大多数时候,这是一个安全的选择


感谢Neil为我指出了正确的方向。

在Rails 4中,initialize\u on\u precompile选项已被弃用

我在Rails 4应用程序中遇到了同样的问题,并决定如果没有设置REDISTOGO_URL配置变量(例如,在assets:precompile期间),就不需要创建Redis连接。所以我改变了我的redis.rb:

if ENV.include?('REDISTOGO_URL')
  uri = URI.parse(ENV["REDISTOGO_URL"])
  REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
end

config.assets.initialize\u on\u precompile
是否设置为false?