2011-08-06 13 views
0

Gmail Gemを使用しています。私はgmailからデータを要求するたびにGmail.connectを実行したくない。変数に接続を保存してアプリケーションのどこにでもアクセスできるようにします。私のRails変数をアプリケーション全体にアクセスさせるには?

最初の試みでは、グローバル変数@ gmail_sessionに保存しましたが、リモート呼び出しを使用して取得しようとした後で変数にアクセスできません。

2回目の試行では、セッション変数セッション[:gmail]に接続を保存しました。私はそれが解決策になるだろうと思ったが、私は、このエラーメッセージが表示されました:何marshal_dumpがThreadクラスのために定義されていない

私は自分のGmail接続:)

感謝を保存助けてください!

答えて

0

Railsはここで初心者くさいので、そこにもっと良い方法があるかもしれませんが、ここでは私のこの上の20です...

そこ自体@gmail_sessionオブジェクトをロードする方法、その方法のANを作成するapplication_controllerを使用して、インスタンスvarとすべてのコントローラ/ビューで使用可能です。

def get_using_remote_call 

    @gmail_session = //do some stuff 

end 

次に、あなたが先に行くと、それらがキャッシュされている生産の彼らの最初のロード後に、これはあなたまで問題にならないはずなので、コントローラの負荷のいずれかのたびに関数を呼び出すapplication_controllerでafter_filterを追加することができますこの

config.autoload_paths += %W(#{config.root}/lib) 
のようなアプリが設定/ libsの中のモジュールが含まれており、あなたの設定でのautoloadにディレクトリを追加することです

...毎日同じことをやって別の方法を10,000秒の訪問を取得/ application.rb

これは自動的にロードされますモジュール/クラス/何でも、その後、あなたは、単に機能get_using_remote_callを呼び出し、オブジェクトとして扱い、それをチェーン、またはあなたの

@gmail_session = get_using_remote_call 

または単にあなたのコントローラのafter_filter/before_filter :)

でこれを使用することができますすることができます

希望します。

+0

私はあなたの最初の提案を試みましたが失敗します。ここに私がしたことがあります。私のapplication_controllerでは、私は** login_gmain(アカウント)** _create gmail variable_、** logout_gmail ** _empty gmail variable_、** current_gmail ** _return gmail variable_を持っています。ページの最初の読み込み時に、current_gmailはアクティブなgmailセッションを取得できますが、リモート呼び出し後にはcurrent_gmailメソッドが機能していません。私にはafter_filter:current_gmailが含まれています。これを実装する良い方法はありますか?私を助ける方法:) –