0

absinthe middleware/3FunWithFlags.enabled?コールバック内で(ref fwf )を使用しようとしていますが、次のエラーが発生しました。

(ArgumentError) argument error
    (stdlib) :ets.lookup(:fun_with_flags_cache, :some_flag)

Stacktrace:
  │ lib/fun_with_flags/store/cache.ex:35: FunWithFlags.Store.Cache.get/1
  │ lib/fun_with_flags/store.ex:12: FunWithFlags.Store.lookup/1
  │ lib/fun_with_flags.ex:77: FunWithFlags.enabled?/2

あまり試していません。問題が発生している場所を絞り込みました。:some_flag record(またはおそらくテーブル) が作成される前にミドルウェアがコンパイル:fun_with_flags_cacheされ、レコード/テーブルがないために失敗したと思います。

このリンクは言う:

フラグ情報を Redis またはリレーショナル DB (Ecto を使用した PostgreSQL または MySQL) に保存して、異なるノード間での永続化と同期を行いますが、高速検索のために ETS テーブルにローカル キャッシュも保持します。ノードでフラグが追加または切り替えられると、他のノードは PubSub を介して通知され、ローカルの ETS キャッシュをリロードします。

次の構成でETSを無効にしようとしました:

config :fun_with_flags, :cache,
  enabled: false,

しかし、私は働きませんでした。:(

これが私がそれをどのように使用しているかの例です:

defmodule MyApp.Schema do
use Absinthe.Schema
...
  def middleware(middleware, field, object) do
  FunWithFlags.enabled?(:some_flag) # <-- (ArgumentError) argument error (stdlib) :ets.lookup...
  ...
  end
end

ありがとう!

4

1 に答える 1