Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

session_storeにredis_storeが使われてなさそうな件について #629

Open
sion908 opened this issue Aug 9, 2024 · 8 comments
Open
Labels
bug Something isn't working

Comments

@sion908
Copy link

sion908 commented Aug 9, 2024

起こっている問題 / The Problem

  • ローカルのdockerを用いて開発している。
  • omniauthの開発に際してredisをsession_storeとして用いたいが、sessionがredisに保存されない
  • なぜか知りたい

スクリーンショット / Screenshot

image

期待する見せ方・挙動 / Expected Behavior

  • redisにsessionが保存される

起こっている問題の再現手段 / Steps to Reproduce

  1. app/controllers/decidim_controller.rbを以下に書き換える
    これにより、このサイト内のどのルーティングでもセッションに書き文字列が追加されることになる。
    ...の部分に10,000字程度追加することで、cookieがオーバーフローする。
# frozen_string_literal: true

# Entry point for Decidim. It will use the `DecidimController` as
# entry point, but you can change what controller it inherits from
# so you can customize some methods.
class DecidimController < ApplicationController
    before_action :set_session_value

    private

    def set_session_value
        session[:example_key] = "..."
    end
end

期待される動作として、sessionはredisに保存されるので、cookieはオーバーフローしないはずである。

動作環境・ブラウザ / Environment

  • macOS
  • docker
@sion908 sion908 added the bug Something isn't working label Aug 9, 2024
@takahashim
Copy link
Collaborator

docker compose run app rails c等でrails consoleを立ち上げて、Rails.application.config.session_storeを入力するとActionDispatch::Session::CacheStoreが返ってくるでしょうか?

@sion908
Copy link
Author

sion908 commented Aug 9, 2024

@takahashim
そのようです
調査として何が必要でしょうか?
image
ついでに環境変数とtmpファイルにファイルが入っていることは確認しました
image
tmpファイルの画像はsession_storeと関係ないように感じたのですが、関係あるのでしょうか?
develop.rb内でファイルの存在確認をしているのは確認しました

よろしくお願いいたします

@sion908
Copy link
Author

sion908 commented Aug 9, 2024

ちなみにgemファイルに
gem 'redis-rails'
の記述がなかったと思いますがこれは必要なかったでしょうか?

@takahashim
Copy link
Collaborator

tmpファイルの画像というのは #629 (comment) の2つ目の画像のことですよね。これはsession_storeではなくキャッシュの方に関係するものかと思います(developmentのデフォルトではcache_storeがnull_storeのはずなので、null_storeではないことを確認するためのものです)。

それとは別に、session_storeがCacheStoreを使ってるかどうかを確認するためのものが Rails.application.config.session_store のつもりでした。

また、redis-railsはまた別の話で、これはCacheStoreではなくRedisStoreというRedis専用のsession storeを使うためのものなのですが、他にもいろいろ含むものになっています。便利かもしれませんが依存関係が増えていろいろ面倒という話も聞くので、decidim-cfjでは「シンプル」かつ「Rails標準のものを使う」というポリシーで、

  • キャッシュのストレージにRedisを使う
  • セッションストアにもキャッシュを使う

という形にしています。

続く調査方法については少々お待ち下さい…

@sion908
Copy link
Author

sion908 commented Aug 9, 2024

了解です
よろしくお願いいたします

@takahashim
Copy link
Collaborator

@sion908 この件について調査してみているのですが、どうもDecidim v0.27ではdecidim-coreのEngine側でCookieStoreを強制しており、アプリ側で変更しても一見変わっているようでも実際には変更できていないようでした。
任意のStoreをDecidimのセッションストアとして使えるようになるのはv0.28以降のようです(つまり最新のDecidimでは対応済みのようでした)。

現行のdecidim-cfjではどうするかは未定で、解決にはもう少しお時間がかかりそうです(素朴にv0.28での修正をbackportしたdecidim-coreと差し替えたところでは正常に動作しませんでした…)。今しばらくお待ちいただけるとありがたいです。

@sion908
Copy link
Author

sion908 commented Aug 10, 2024

@takahashim
調査ありがとうございます
ある意味一番ありがたい回答です

ちなみにv0.28については基本的に凍結状態という認識で良いでしょうか?

@takahashim
Copy link
Collaborator

基本的に凍結状態の意味がちょっと分かりかねるのですが、v0.28については以下のような理解です。

  • Decidim本体ではv0.28系が最新安定版で、最新のバージョンはv0.28.2です
    • v0.29が開発版で、先日v0.29.0.rc1が出ました
    • 今後も何かあればv0.28.3やその後のバージョンがリリースされるかと思われます
  • decidim-cfjは現在v0.27.7で、v0.28への移行はまだ作業中です
    • v0.28はデザインが大きく変更になり、その影響で全体的に大きく手が入っており、技術的な側面に加えて各インスタンスの運用管理の側面からも簡単には移行できなさそうです
    • とはいえどこかのタイミングで移行することにはなるかと思っています
    • 上記のような状況なので、しばらくはdecidim-cfjへの改善・改良作業はv0.27ベースになるかと思います

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants