Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
Heroku错误:ArgumentError:无效的uri方案'';_Heroku_Redis_Sidekiq_Redistogo - Fatal编程技术网

Heroku错误:ArgumentError:无效的uri方案'';

Heroku错误:ArgumentError:无效的uri方案'';,heroku,redis,sidekiq,redistogo,Heroku,Redis,Sidekiq,Redistogo,我正试图让我的Rails应用程序处理Sidekiq的后台工作,并将Sidekiq与redis连接起来,以便在Heroku上运行。这是我的程序文件: web: bundle exec puma -C config/puma.rb worker: bundle exec -C config/sidekiq.yml 下面是我的Sidekiq.rbinitializer文件: require 'sidekiq' Sidekiq.configure_client do |config| con

我正试图让我的Rails应用程序处理Sidekiq的后台工作,并将Sidekiq与redis连接起来,以便在Heroku上运行。这是我的
程序文件

web: bundle exec puma -C config/puma.rb
worker: bundle exec -C config/sidekiq.yml
下面是我的
Sidekiq.rb
initializer文件:

require 'sidekiq'

Sidekiq.configure_client do |config|  
  config.redis = { url: ENV['REDIS_PROVIDER'] }
end 

Sidekiq.configure_client do |config|  
   config.redis = { url: ENV['REDIS_PROVIDER'] }
end
Heroku中的
REDIS\u PROVIDER
变量设置为
REDISTOGO\u URL
。根据提供的说明,我还添加了一个初始化器文件
redis.rb
。内容如下:

uri = URI.parse(ENV["REDIS_PROVIDER"])
REDIS = Redis.new(:url => uri)
我收到以下错误,不确定如何解决。Heroku也抛出了一个H10错误

[3] ! Unable to load application: ArgumentError: invalid uri scheme '

/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:416:in `_parse_options': invalid uri scheme '' (ArgumentError) 
更新:

我在Heroku上回滚到以前的版本,从gemfile中删除redis gem,删除redis Initializer文件,应用程序不再崩溃。但是,后台作业仍然不起作用,我在日志中发现以下错误:

heroku/worker.1:  Starting process with command `bundle exec -C config/sidekiq.yml`
heroku/worker.1:  State changed from starting to up
app/worker.1:  bundler: command not found: -C 
heroku/worker.1:  Process exited with status 127 
heroku/worker.1:  State changed from up to crashed 
app/worker.1:  Install missing gem executables with `bundle install` 
为什么系统不接受配置参数导致工作进程崩溃

无效uri方案的错误仍然存在:

app/web.1:  Completed 500 Internal Server Error in 303ms (ActiveRecord: 0.0ms) 
app/web.1:  ArgumentError (invalid uri scheme ''): 
sidekiq.yml文件

# Sample configuration file for Sidekiq.
# Options here can still be overridden by cmd line args.
# Place this file at config/sidekiq.yml and Sidekiq will
# pick it up automatically.
---
:verbose: false
:concurrency: 10

# Set timeout to 8 on Heroku, longer if you manage your own systems.
:超时:8

# Sidekiq will run this file through ERB when reading it so you can
# even put in dynamic logic, like a host-specific queue.
# http://www.mikeperham.com/2013/11/13/advanced-sidekiq-host-specific-queues/
:queues:
  - critical
  - default
  - low

# you can override concurrency based on environment
制作: :并发:25 登台:
:并发性:10

您使用的REDIS\u提供程序不正确。请再次查看文档


您使用的REDIS\u提供程序不正确。请再次查看文档


通过将redis.rb和sidekiq.rb中的redis URL引用更改为相同的redis Cloud ENV变量,我能够纠正我的应用程序(Rails 6,Ruby 2.7.2)中失败的Heroku部署和
ArgumentError:invalid uri scheme''
错误

堆栈跟踪为:

remote:        Running: rake assets:precompile
remote:        rake aborted!
remote:        ArgumentError: invalid uri scheme ''
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis/client.rb:436:in `_parse_options'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis/client.rb:84:in `initialize'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis.rb:62:in `new'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis.rb:62:in `initialize'
remote:        /tmp/build_961a7a51/config/initializers/redis.rb:4:in `new'
remote:        /tmp/build_961a7a51/config/initializers/redis.rb:4:in `<top (required)>'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:318:in `load'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:318:in `block in load'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:291:in `load_dependency'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:318:in `load'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:666:in `block in load_config_initializer'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/notifications.rb:182:in `instrument'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:665:in `load_config_initializer'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:624:in `each'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:624:in `block in <class:Engine>'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:32:in `instance_exec'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:32:in `run'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:61:in `block in run_initializers'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:50:in `each'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:50:in `tsort_each_child'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:60:in `run_initializers'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/application.rb:363:in `initialize!'
remote:        /tmp/build_961a7a51/config/environment.rb:5:in `<top (required)>'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:324:in `block in require'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:291:in `load_dependency'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:324:in `require'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/application.rb:339:in `require_environment!'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/application.rb:523:in `block in run_tasks_blocks'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.2.2/lib/sprockets/rails/task.rb:61:in `block (2 levels) in define'
remote:        Tasks: TOP => environment
remote:        (See full trace by running task with --trace)
remote:
remote:  !
remote:  !     Precompiling assets failed.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed
sidekiq.rb

if ENV["REDISCLOUD_CRIMSON_URL"]
    $redis = Redis.new(:url => ENV["REDISCLOUD_CRIMSON_URL"])
end
require 'sidekiq/web'
    
if Rails.env.development?
  Sidekiq.configure_server do |config|
    config.redis = { url: 'redis://localhost:6379' }
  end
end

if Rails.env.production?
    Sidekiq.configure_client do |config|
        config.redis = { url: ENV['REDISCLOUD_CRIMSON_URL'], size: 1, network_timeout: 5 }
    end

    Sidekiq.configure_server do |config|
        pool_size = (Sidekiq.options[:concurrency] + 2)
        config.redis = { url: ENV['REDISCLOUD_CRIMSON_URL'], size: pool_size, network_timeout: 5 }
    end

    Sidekiq::Extensions.enable_delay!
end

REDIS_URL和REDIS_PROVIDER环境变量在Heroku设置中也设置为REDISCLOUD_CRIMSON_URL(变量,而不是实际值)。希望这会有所帮助。

通过将redis.rb和sidekiq.rb中的redis URL引用更改为相同的redis Cloud ENV变量,我能够纠正我的应用程序(Rails 6,Ruby 2.7.2)中失败的Heroku部署和
ArgumentError:invalid uri scheme''
错误

堆栈跟踪为:

remote:        Running: rake assets:precompile
remote:        rake aborted!
remote:        ArgumentError: invalid uri scheme ''
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis/client.rb:436:in `_parse_options'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis/client.rb:84:in `initialize'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis.rb:62:in `new'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis.rb:62:in `initialize'
remote:        /tmp/build_961a7a51/config/initializers/redis.rb:4:in `new'
remote:        /tmp/build_961a7a51/config/initializers/redis.rb:4:in `<top (required)>'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:318:in `load'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:318:in `block in load'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:291:in `load_dependency'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:318:in `load'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:666:in `block in load_config_initializer'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/notifications.rb:182:in `instrument'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:665:in `load_config_initializer'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:624:in `each'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/engine.rb:624:in `block in <class:Engine>'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:32:in `instance_exec'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:32:in `run'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:61:in `block in run_initializers'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:50:in `each'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:50:in `tsort_each_child'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/initializable.rb:60:in `run_initializers'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/application.rb:363:in `initialize!'
remote:        /tmp/build_961a7a51/config/environment.rb:5:in `<top (required)>'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:324:in `block in require'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:291:in `load_dependency'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.4/lib/active_support/dependencies.rb:324:in `require'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/application.rb:339:in `require_environment!'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.4/lib/rails/application.rb:523:in `block in run_tasks_blocks'
remote:        /tmp/build_961a7a51/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.2.2/lib/sprockets/rails/task.rb:61:in `block (2 levels) in define'
remote:        Tasks: TOP => environment
remote:        (See full trace by running task with --trace)
remote:
remote:  !
remote:  !     Precompiling assets failed.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed
sidekiq.rb

if ENV["REDISCLOUD_CRIMSON_URL"]
    $redis = Redis.new(:url => ENV["REDISCLOUD_CRIMSON_URL"])
end
require 'sidekiq/web'
    
if Rails.env.development?
  Sidekiq.configure_server do |config|
    config.redis = { url: 'redis://localhost:6379' }
  end
end

if Rails.env.production?
    Sidekiq.configure_client do |config|
        config.redis = { url: ENV['REDISCLOUD_CRIMSON_URL'], size: 1, network_timeout: 5 }
    end

    Sidekiq.configure_server do |config|
        pool_size = (Sidekiq.options[:concurrency] + 2)
        config.redis = { url: ENV['REDISCLOUD_CRIMSON_URL'], size: pool_size, network_timeout: 5 }
    end

    Sidekiq::Extensions.enable_delay!
end

REDIS_URL和REDIS_PROVIDER环境变量在Heroku设置中也设置为REDISCLOUD_CRIMSON_URL(变量,而不是实际值)。希望这有帮助。

TL;博士如果您在本地使用Sidekiq/Redis有问题,请将Redis URI定义为
Sidekiq\u Redis\u URL=redis://localhost:6379

文档说Sidekiq将尝试连接到
localhost:6379
,这可能是真的,但他们缺少一个小细节。URI方案不是
http
https
,而是
redis

在我的配置中,我试图传递一个在.env文件中设置的具体SIDEKIQ_REDIS_URL

Sidekiq.configure_server do |config|
    config.redis = { url: ENV.fetch('SIDEKIQ_REDIS_URL'), size: 12, network_timeout: 5 }
end
现在,如果您不在.env中声明
SIDEKIQ\u REDIS\u URL
,它当然不会工作。此外,即使添加默认URI,也会失败:

SIDEKIQ\u REDIS\u URL=localhost:6379

它会抱怨URI方案

URI方案似乎不是
http
https
,而是
redis:


SIDEKIQ\u REDIS\u URL=redis://localhost:6379

TL;博士如果您在本地使用Sidekiq/Redis有问题,请将Redis URI定义为
Sidekiq\u Redis\u URL=redis://localhost:6379

文档说Sidekiq将尝试连接到
localhost:6379
,这可能是真的,但他们缺少一个小细节。URI方案不是
http
https
,而是
redis

在我的配置中,我试图传递一个在.env文件中设置的具体SIDEKIQ_REDIS_URL

Sidekiq.configure_server do |config|
    config.redis = { url: ENV.fetch('SIDEKIQ_REDIS_URL'), size: 12, network_timeout: 5 }
end
现在,如果您不在.env中声明
SIDEKIQ\u REDIS\u URL
,它当然不会工作。此外,即使添加默认URI,也会失败:

SIDEKIQ\u REDIS\u URL=localhost:6379

它会抱怨URI方案

URI方案似乎不是
http
https
,而是
redis:


SIDEKIQ\u REDIS\u URL=redis://localhost:6379

我再次查看了文档,我相信我正确地使用了它。它说:
将REDIS\u提供者env var设置为包含REDIS服务器url的env var的名称。(RedisGreen示例:设置REDIS_PROVIDER=RedisGreen_URL,Sidekiq将在连接到REDIS时使用RedisGreen_URL env变量的值。)
REDIS_PROVIDER变量设置为heroku中的REDISTOGO_URL变量,该变量包含
redis://redistogo:xxxxx
。我写了Sidekiq;你的信心放错地方了REDIS_PROVIDER的值不应该是URL,因此
URI.parse(ENV['REDIS_PROVIDER'])
是错误的。REDIS_PROVIDER的值应该是“REDISTOGO_URL”。您可以完全删除sidekiq.rb初始值设定项。如果REDIS_PROVIDER设置正确,Sidekiq将自动解决所有问题。嗨,迈克,谢谢你的帮助。正如我在更新中提到的,我删除了redis初始值设定项文件,因为我读到它不是必需的。我在上一条评论中解释说,REDIS_PROVIDER变量的设置与您在上一条评论中指定的完全一致。我再次查看了文档,我相信我使用的是正确的。它说:
将REDIS\u提供者env var设置为包含REDIS服务器url的env var的名称。(RedisGreen示例:设置REDIS_PROVIDER=RedisGreen_URL,Sidekiq将在连接到REDIS时使用RedisGreen_URL env变量的值。)
REDIS_PROVIDER变量设置为heroku中的REDISTOGO_URL变量,该变量包含
redis://redistogo:xxxxx
。我写了Sidekiq;你的信心放错地方了REDIS_PROVIDER的值不应该是URL,因此
URI.parse(ENV['REDIS_PROVIDER'])
是错误的。REDIS_PROVIDER的值应该是“REDISTOGO_URL”。您可以完全删除sidekiq.rb初始值设定项。如果REDIS_提供程序设置正确,