【问题标题】:Redis with Rails 5.1 breaking Rspec带有 Rails 5.1 的 Redis 打破了 Rspec
【发布时间】:2018-07-02 07:24:09
【问题描述】:

在我将 Redis 安装到我的网络应用程序之前,我有一个运行良好的 Rspec 测试套件。

就是 config/initializers/redis.rb 文件中的两行代码

uri = URI.parse(ENV['REDISTOGO_URL'])
$redis = Redis::Namespace.new("EW", :redis => Redis.new(url: uri))

当我将上述内容注释掉时,rspec 工作正常(我什至还没有开始测试 redis,因为我不能)。

以下是 rspec 给我的错误。

  An error occurred while loading ./spec/models/waitlist_spec.rb.
Failure/Error: require File.expand_path('../../config/environment', __FILE__)

URI::InvalidURIError:
  bad URI(is not URI?): 
# ./config/initializers/redis.rb:1:in `<top (required)>'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `load'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `block in load'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:258:in `load_dependency'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `load'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/engine.rb:655:in `block in load_config_initializer'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/notifications.rb:168:in `instrument'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/engine.rb:654:in `load_config_initializer'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/engine.rb:612:in `block (2 levels) in <class:Engine>'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/engine.rb:611:in `each'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/engine.rb:611:in `block in <class:Engine>'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/initializable.rb:30:in `instance_exec'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/initializable.rb:30:in `run'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/initializable.rb:59:in `block in run_initializers'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/initializable.rb:48:in `each'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/initializable.rb:48:in `tsort_each_child'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/initializable.rb:58:in `run_initializers'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/railties-5.1.0/lib/rails/application.rb:353:in `initialize!'
# ./config/environment.rb:5:in `<top (required)>'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `require'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `block in require'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:258:in `load_dependency'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `require'
# ./spec/rails_helper.rb:3:in `<top (required)>'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `require'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `block in require'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:258:in `load_dependency'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:292:in `require'
# ./spec/models/waitlist_spec.rb:1:in `<top (required)>'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `load'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `block in load'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:258:in `load_dependency'
# /Users/ptenteromano/.rvm/gems/ruby-2.2.5@new_wardrobe/gems/activesupport-5.1.0/lib/active_support/dependencies.rb:286:in `load'
# ------------------
# --- Caused by: ---
# NoMethodError:
#   undefined method `to_str' for nil:NilClass
#   ./config/initializers/redis.rb:1:in `<top (required)>'
No examples found.

Randomized with seed 3749


Finished in 0.00061 seconds (files took 9.32 seconds to load)
0 examples, 0 failures, 18 errors occurred outside of examples

我对处理复杂的网络应用程序很陌生,以前从未使用过 Redis,所以我对此有点迷茫。

感谢任何帮助。

【问题讨论】:

  • 错误很明显bad URI(is not URI?): 我假设环境变量不是URI ENV['REDISTOGO_URL'])

标签: ruby-on-rails rspec redis uri


【解决方案1】:

原来它就像评论者提到的那样简单。 ENV 变量不是 URI 可读的,所以我使用了一种编码方法,它解决了这个问题。

encoded_url = URI.encode(ENV['REDISTOGO_URL'])
uri = URI.parse(encoded_url)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 2011-10-23
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多