###前提・実現したいこと
rails5.0.0でredisを動かしたいです。
先日、rails4.2.6から5.0.0へアップデートしました!
そこで、たくさんエラーがでたので、いろいろ修正しました。
その中で,redisもエラーを起こしていたのですが、
応急措置をしました。ただ、その応急措置はredisを動かさないようにするためのものであって結局はredisに関連するコードを記述しているファイルではエラーを起こしてしまうということに気づきました…
###発生している問題・エラーメッセージ
【応急措置までの過程】
rails s -b $IP -p $PORT実行
=> Booting WEBrick => Rails 5.0.0 application starting in development on http://0.0.0.0:8080 => Run `rails server -h` for more startup options Exiting /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/uri/rfc3986_parser.rb:18:in `rescue in split': bad URI(is not URI?): (URI::InvalidURIError)
ネットで調べたところ、
redis.rbを条件分岐にすれば解決できると書いてありました。
bofore
require 'redis' uri = URI.parse(ENV["REDIS"]) REDIS = Redis.new(host: uri.host, port: uri.port)
after
if ENV["REDIS"] require 'redis' uri = URI.parse(ENV["REDIS"]) REDIS = Redis.new(host: uri.host, port: uri.port) end
ここから、rails s -b $IP -p $PORT実行
=> Booting WEBrick => Rails 5.0.0 application starting in development on http://0.0.0.0:8080 => Run `rails server -h` for more startup options [2017-01-23 03:11:26] INFO WEBrick 1.3.1 [2017-01-23 03:11:26] INFO ruby 2.3.0 (2015-12-25) [x86_64-linux] [2017-01-23 03:11:26] INFO WEBrick::HTTPServer#start: pid=5033 port=8080
起動することができるようになりました。
【応急措置で対応できなかったところ】
しかし、これはredisを起動させないための条件分岐であったようで、
redisを記述しているファイルではエラーが起きてしまいます。
NameError in PageController#rank uninitialized constant PageController::REDIS app/controllers/page_controller.rb:21:in `rank'
【page_controller.rb】
def rank ##ランキング ★この行★ids = REDIS.zrevrangebyscore "microposts/daily/#{Date.yesterday.to_s}", "+inf", 0, limit: [0, 5], withscores: true @rank = ids.map{ |id| Micropost.find(id) } if @rank.count < 5 adding_microposts = Micropost.order(updated_at: :DESC).where.not(id: ids).limit(5 - @rank.count) @ranking_microposts = @rank.concat(adding_microposts) end option end
【違う応急措置】
ここで、先ほどとは違う対処を試みました。
最初のエラー内容をもう一度確認。
=> Booting WEBrick => Rails 5.0.0 application starting in development on http://0.0.0.0:8080 => Run `rails server -h` for more startup options Exiting /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/uri/rfc3986_parser.rb:18:in `rescue in split': bad URI(is not URI?): (URI::InvalidURIError)
URIがおかしいということで、調べると日本語対応していないと発生するエラーだと判明しましたので、gemを使いました。
gem 'addressable', require: 'addressable/uri'
redis.rb(before)
require 'redis' uri = ★URI★.parse(ENV["REDIS"]) REDIS = Redis.new(host: uri.host, port: uri.port)
redis.rb(after)
require 'redis' uri = ★Addressable::URI★.parse(ENV["REDIS"]) REDIS = Redis.new(host: uri.host, port: uri.port)
ここで、エラーの内容が変わりよくわからなくなってしまいました…
どうやら、uri変数にうまく値が入っていないようでして…
=> Booting WEBrick => Rails 5.0.0 application starting in development on http://0.0.0.0:8080 => Run `rails server -h` for more startup options Exiting /home/ubuntu/workspace/config/initializers/redis.rb:4:in `<top (required)>': undefined method `host' for nil:NilClass (NoMethodError)
ご経験ある方、ご助言お願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
redis.3.3.2
rails5.0.0
あなたの回答
tips
プレビュー