[英]Access a variable within 2 modules elixir
我正在使用一種方法與server
連接
connect_to_server(ip, username, password)
|> check_status_for_server()
defp check_status_for_server({:error, :nxdomain}), do: {"IP doesn't seem correct.", :error}
defp check_status_for_server({:error, :timeout}), do: {"Server is giving timeout.", :error}
defp check_status_for_server({:error, reason}), do: {reason, :error}
defp check_status_for_server({:ok, connection}), do: {true, connection}
defp connect_to_server(ip, username, password), do:
SSHEx.connect(ip: ip, user: username, password: password)
作為成功連接的結果,我得到了connection
,當用戶單擊表單中的一個按鈕,並且表單包含2個按鈕時,上述所有操作均有效,其中1個正在建立此連接,第2個應該使用該連接(兩者都是ajax請求。)
但是,正如您看到的那樣,兩個按鈕都在發送ajax請求,兩個ajax調用都達到2 def
,一個正在建立連接,第二個正在使用該連接進行操作,我不知道如何使該連接創建一次並可用第二防御也是如此。
這是第二個ajax調用def create_raid(conn, params) do
結束方法,這是第一個
def details_about_raid(conn, %{"ip" => ip, "username" => username, "password" => password} = _params) do
connect_to_server(ip, username, password)
|> check_status_for_server()
|> still_in_pipe_operate(conn)
end
我試圖將連接pid發送回ajax響應,但是失敗了。 任何幫助將是感激的。
更新:我試圖用密鑰將連接pids保存在ets表中,但出現此錯誤。
** (exit) an exception was raised:
** (ArgumentError) argument error
(stdlib) :ets.insert(:connection, {"70122EE1441B746788CD11FC83B3B211", #PID<0.435.0>})
我已經在Repo模塊中創建了連接表。
更新:
我錯誤地初始化了ETS表,
def start_ets_connection do
:ets.new(:connection, [:set, :protected, :named_table])
end
它應該是:public
而不是:protected
,現在可以正常工作了,我也可以將conn保存到ETS中。
您需要將連接存儲在服務器上的某個位置。 我建議以下內容:
在第一個AJAX請求中:
:crypto.strong_rand_bytes(16) |> Base.encode16()
) 在第二個AJAX請求中:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.