2017-07-21 2 views
-1

Je veux utiliser le paquet {: redix, "~> 0.6.1"} hex dans mon application de chat et commencer dans l'arborescence de supervisionComment puis-je exécuter Redix dans l'arborescence de supervision dans l'application phoenix elixir chat et accéder à partir de différents modules

{:ok, conn} = Redix.start_link() 
{:ok, conn} = Redix.start_link(host: "example.com", port: 5000) 
{:ok, conn} = Redix.start_link("redis://localhost:6379/3", name: :redix) 


Redix.command(conn, ["SET", "mykey", "foo"]) 

mais il donne l'erreur lorsque je tente de mettre le lien établir une connexion à processus enfant

children = [ 
     # Start the Ecto repository 
     supervisor(PhoenixChat.Repo, []), 
     # Start the endpoint when the application starts 
     supervisor(PhoenixChat.Endpoint, []), 
     # Start your own worker by calling: PhoenixChat.Worker.start_link(arg1, arg2, arg3) 
     # worker(PhoenixChat.Worker, [arg1, arg2, arg3]), 
     supervisor(PhoenixChat.Presence, []), 

     #supervisor(Phoenix.PubSub.Redis, [:chat_pubsub, host: "127.0.0.1"]) 
    ] 

Comment puis-je démarrer la connexion Redix et stocker des données à Redis?

Répondre

-1
children = [ 
     # Start the Ecto repository 
     supervisor(PhoenixChat.Repo, []), 
     # Start the endpoint when the application starts 
     supervisor(PhoenixChat.Endpoint, []), 
     # Start your own worker by calling: PhoenixChat.Worker.start_link(arg1, arg2, arg3) 
     # worker(PhoenixChat.Worker, [arg1, arg2, arg3]), 
     supervisor(PhoenixChat.Presence, []), 
     worker(Redix, [[], [name: :redix]]), 

     #supervisor(Phoenix.PubSub.Redis, [:chat_pubsub, host: "127.0.0.1"]) 
    ] 




Redix.command(:redix, ["SET", "key", "value"]) 
2

Ce que vous voulez faire est Register id de processus. Pour ce faire, vous pouvez généralement indiquer son nom dans opts, comme ceci:

worker(Redix, [[], [name: RedixConnection]]) 

Lorsque le processus est enregistré habituellement vous pouvez utiliser son nom au lieu de PID (toujours vérifier dans la documentation, mais qui est modèle commun) comme celui-ci :

Redix.command(RedixConnection, ["PING"]) 

La plupart du temps, une connexion n'est pas suffisante. Vous voulez probablement utiliser une sorte de mécanisme de mise en commun comme poolboy. Il ya une page très propre dans documentation pour vous de lire qui s'appelle Real-world usage. Il répondra probablement à la plupart des questions liées à ce sujet.

Veuillez également envisager d'utiliser des solutions intégrées Erlang/Elixir pour votre cause. Je ne connais pas votre cas d'utilisation exact, mais vous voudrez peut-être vérifier ETS, DTS et Mnesia.