Как сделать мою переменную Rails доступной для всего приложения? - PullRequest
0 голосов
/ 06 августа 2011

Я использую Gmail Gem.Я не хочу запускать Gmail.connect каждый раз, когда буду запрашивать данные из gmail.Я хочу сохранить соединение в переменной, чтобы иметь доступ к нему в любом месте приложения.

Первая попытка, я сохранил его в глобальной переменной @ gmail_session , но не могу получить доступ кпеременная после того, как я пытался получить его с помощью удаленного вызова.

Вторая попытка, я сохранил соединение в переменной сеанса session [: gmail] .Я думал, что это будет решением, но я получил это сообщение об ошибке: marshal_dump не определен для класса Thread

Помогите мне сохранить соединение с Gmail:)

Спасибо!

1 Ответ

0 голосов
/ 06 августа 2011

Rails новичок здесь, так что может быть лучший выход, но вот мои 20 на этом ..

Используйте application_controller, чтобы создать метод, который сам загружает туда объект @gmail_session, таким образом, он является экземпляром var и доступен для всех контроллеров / представлений.

Например,

def get_using_remote_call

  @gmail_session = //do some stuff

end

Затем вы можете пойти дальше и добавить after_filter в application_controller, который вызывает функцию каждый раз при загрузке любого из контроллеров, поскольку после первой загрузки в производство они кэшируются, это не должно создавать проблем, пока ваше приложение не посещает 10000 с. день ...

Другим способом сделать то же самое было бы включить модуль в config / libs и добавить каталог для автозагрузки в ваш config / application.rb следующим образом:

config.autoload_paths += %W(#{config.root}/lib)

Это автоматически загрузит модуль / класс / что угодно, и тогда вы можете просто вызвать функцию get_using_remote_call и обработать ее как объект и связать ее, или вы можете

@gmail_session = get_using_remote_call 

ИЛИ просто используйте это в after_filter / before_filter вашего контроллера :)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...