0

SinatraアプリでRedisを使用したいです。ローカルとリモート(heroku)のコンソールでRedisインスタンスにアクセスすることができますが、それをレーキタスクで使用したい場合、エラーが発生し、その理由がわからないようです。

app.rb:

class MyApp < Sinatra::Base
  configure do
    uri = URI.parse(ENV["REDISCLOUD_URL"])
    $redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
  end
end

config.ru:

require 'rubygems'
require 'sinatra'
require './app'
run MyApp

Gemfile

gem 'redis'

Rakefile.rb

desc 'Try Redis'
  task :try_redis do
  puts $redis.set("try", 0)
end

熊手は中止されました! NoMethodError:nil:NilClassのための未定義のメソッド `set '

私はSinatraにはあまり慣れていませんが、特に私には悪いことは何もありません。私のグローバル変数$ redisが私のアプリのどこからでもアクセスできない理由がわかりません...

あなたが私を啓発することができるならば、前もってありがとう!

1 답변


1

私のグローバル変数$ redisがなぜそうでないのか理解できません   私のアプリのどこからでもアクセス可能

きみのrakeタスクはアプリとは関係ありません。の$redis実行時にのみ使用可能な変数sinatraレーキタスクを実行するときには使用できません。のrake自分で実行するタスク


  • ありがとう、私はまだそれについて少し混乱しています(「あなたのレーキタスクはあなたのアプリに関連していません」)、しかし私はただレーキタスクにRedisへの接続を動かさなければなりません、そしてそれはうまく働きます。あなたの答えは私が前進するのを助けました、どうもありがとうございました! - user3029400
  • あなたのレーキタスクはあなたのアプリとは関係ありません。コードレベルでは、サーバーとレーキタスクが接続されていません。これは別のスレッドです。 - Зелёный
  • 二つ開くirbセッション、および割り当て$foo = 1一体にしてみてくださいputs $foo他では。 - Зелёный
  • そうですか。それらは2つの異なるスレッドです。両方ともデータを取得することができるように同じredis DBへの接続を持つべきです。それは理にかなっている。ありがとうございます。 - user3029400

関連する質問

最近の質問