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

젬 파일

gem 'redis'

Rakefile.rb

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

레이크가 중단되었습니다! NoMethodError : 정의되지 않은 메소드 set for nil : NilClass

나는 Sinatra에 익숙하지 않고, 아무것도 나에게 잘못 보지 않습니다. 왜 내 글로벌 변수 $ redis 내 애플 리케이션의 모든 곳에서 액세스 할 수 없을 것이라고 이해가 안 돼요 ...

나에게 계몽 할 수 있다면, 미리 감사드립니다!

1 답변


1

왜 글로벌 변수 $ redis가되지 않을지 이해하지 못합니다.   내 앱에서 어디에서나 액세스 할 수 있습니다.

너의rake작업이 앱과 관련이 없습니다. 그만큼$redis변수는 실행할 때만 사용할 수 있습니다.sinatra서버에 저장되며 레이크 작업을 실행할 때는 사용할 수 없습니다. 그만큼rake자신이 수행하는 작업.


  • 고맙습니다. ( "귀하의 레이크 작업이 귀하의 앱과 관련이 없습니다.") 그것에 대해 아직도 다소 혼란 스럽지만, 단지 레이디스에 대한 연결을 레이크 작업으로 옮겨야 만 괜찮습니다. 당신의 대답은 제가 앞으로 나아갈 수 있도록 도와주었습니다, 정말 고마워요! - user3029400
  • 레이크 작업은 앱과 관련이 없습니다.코드 수준에서는 서버와 레이크 작업이 연결되지 않았으므로 다른 스레드와 관련이 있습니다. - Зелёный
  • 두 개를 열다.irb세션, 할당$foo = 1하나를 시도하고puts $foo다른. - Зелёный
  • 내가 참조. 그것들은 2 개의 다른 쓰레드이고, 둘 다 데이터를 얻을 수있는 동일한 redis DB에 대한 연결을 가져야한다. 말이 되는군요. 감사! - user3029400

관련된 질문

최근 질문