У меня есть приложение Phoenix, где я использую LiveView, чтобы получить пользовательские вводы через пользовательский интерфейс. Эти входы упаковываются в JSON и отправляются в бизнес -процесс Python (сценарий), который, в свою очередь, возвращает результаты в JSON в LiveView, где они отображаются. < /P>
Я отправляю свой json Успешно на Python, запустив его и получая результаты, однако я не получаю результат при выполнении его от LiveView (когда я запускаю свой Python MyNaully в терминале, результаты JSON возвращаются нормально). Это должно быть просто, я уверен, что мне не хватает действительно простой точки. Кто -нибудь может помочь? К вашему сведению, мой бизнес -процесс Python занимает 0,03 секунды, работая при запуске вручную от начала до конца < /p>
python Я звоню: < /p>
def main():
try:
raw_input = sys.stdin.read().strip()
input_data = json.loads(raw_input)
results = optimizer_function(input_data) # optimizer_function is my business process
output = json.dumps(results)
sys.stdout.write(output + "\n")
sys.stdout.flush()
except Exception as e:
sys.stdout.write(json.dumps({"error": str(e)}) + "\n")
sys.stdout.flush()
if __name__ == "__main__":
main()
< /code>
My Phoenix Optimizer Business Process Snippets: < /p>
defmodule Commrefiner.Optimizer do
def run_optimizer(params) do
json_input = Jason.encode!(params)
script_path = Application.fetch_env!(:commrefiner, :optimizer_script_path)
port = Port.open({:spawn_executable, "path/to/virtual/environment/python3"}, [
{:args, [script_path]},
:binary,
:exit_status,
:use_stdio,
:stderr_to_stdout
])
Port.command(port, json_input "\n")
response = collect_output(port, "")
Port.close(port)
case Jason.decode(response) do
{:ok, result} -> result
{:error, _} -> %{"error" => "Invalid JSON response from optimizer"}
end
end
defp collect_output(port, acc) do
case Port.info(port, :os_pid) do
{:os_pid, _pid} ->
receive do
{^port, {:data, output}} -> collect_output(port, acc output)
{^port, {:exit_status, status}} -> acc
after
15_000 -> # ✅ Allow enough time for Python output
acc
end
nil ->
acc
end
end
end
< /code>
my phoenix live_view кодовые фрагменты: < /p>
def handle_event("run_optimizer", _params, socket) do
params = %{params: socket.assigns.user_inputs}
headers = [{"Content-Type", "application/json"}] # Define and ensure correct headers
# encode JSON before sending
response = HTTPoison.post("http://localhost:4000/api/optimizer", Jason.encode!(params), headers)
case response do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
case Jason.decode(body) do
{:ok, results} -> {:noreply, assign(socket, results: results)}
{:error, _} -> {:noreply, assign(socket, results: %{"error" => "Invalid JSON response"})}
end
{:ok, %HTTPoison.Response{status_code: code, body: body}} -> # ✅ Handle non-200 responses
IO.puts("❌ API returned status #{code}")
IO.inspect(body, label: "Non-200 Response")
{:noreply, assign(socket, results: %{"error" => "API error: #{code}"})}
{:error, %HTTPoison.Error{reason: reason}} -> # ✅ Handle request errors
IO.puts("❌ Optimizer API request failed")
IO.inspect(reason, label: "Optimizer API Error")
{:noreply, assign(socket, results: %{"error" => "Failed to call optimizer"})}
end
end
Мои журналы указывают: Тайм -аут в запросе API Phoenix:
Ошибка API оптимизатора :: Тайм -аут < /li>
Пере процесс Python. Частичные данные: "" скрипт Python не отправляет никаких выводов до тайм -аута:
Полный необработанный ответ от Python: ""
Вывод сырого питона: ""
Что происходит? li>
Он отправляет ввод JSON. < /li>
Python не отправляет выход до тайм -аута. < /li>
Время запроса API OUT перед Python может вернуть данные.
Phoenix закрывает соединение, в результате чего Python выходит из строя с BrokenPipeError.
У меня есть приложение Phoenix, где я использую LiveView, чтобы получить пользовательские вводы через пользовательский интерфейс. Эти входы упаковываются в JSON и отправляются в бизнес -процесс Python (сценарий), который, в свою очередь, возвращает результаты в JSON в LiveView, где они отображаются. < /P> Я отправляю свой json Успешно на Python, запустив его и получая результаты, однако я не получаю результат при выполнении его от LiveView (когда я запускаю свой Python MyNaully в терминале, результаты JSON возвращаются нормально). Это должно быть просто, я уверен, что мне не хватает действительно простой точки. Кто -нибудь может помочь? К вашему сведению, мой бизнес -процесс Python занимает 0,03 секунды, работая при запуске вручную от начала до конца < /p> python Я звоню: < /p> [code]def main(): try: raw_input = sys.stdin.read().strip() input_data = json.loads(raw_input) results = optimizer_function(input_data) # optimizer_function is my business process output = json.dumps(results) sys.stdout.write(output + "\n") sys.stdout.flush() except Exception as e: sys.stdout.write(json.dumps({"error": str(e)}) + "\n") sys.stdout.flush()
if __name__ == "__main__": main() < /code> My Phoenix Optimizer Business Process Snippets: < /p> defmodule Commrefiner.Optimizer do def run_optimizer(params) do json_input = Jason.encode!(params) script_path = Application.fetch_env!(:commrefiner, :optimizer_script_path)
case Jason.decode(response) do {:ok, result} -> result {:error, _} -> %{"error" => "Invalid JSON response from optimizer"} end end
defp collect_output(port, acc) do case Port.info(port, :os_pid) do {:os_pid, _pid} -> receive do {^port, {:data, output}} -> collect_output(port, acc output) {^port, {:exit_status, status}} -> acc after 15_000 -> # ✅ Allow enough time for Python output acc end nil -> acc end end end < /code> my phoenix live_view кодовые фрагменты: < /p> def handle_event("run_optimizer", _params, socket) do params = %{params: socket.assigns.user_inputs} headers = [{"Content-Type", "application/json"}] # Define and ensure correct headers
# encode JSON before sending response = HTTPoison.post("http://localhost:4000/api/optimizer", Jason.encode!(params), headers)
case response do {:ok, %HTTPoison.Response{status_code: 200, body: body}} -> case Jason.decode(body) do {:ok, results} -> {:noreply, assign(socket, results: results)} {:error, _} -> {:noreply, assign(socket, results: %{"error" => "Invalid JSON response"})} end
{:ok, %HTTPoison.Response{status_code: code, body: body}} -> # ✅ Handle non-200 responses IO.puts("❌ API returned status #{code}") IO.inspect(body, label: "Non-200 Response") {:noreply, assign(socket, results: %{"error" => "API error: #{code}"})}
{:error, %HTTPoison.Error{reason: reason}} -> # ✅ Handle request errors IO.puts("❌ Optimizer API request failed") IO.inspect(reason, label: "Optimizer API Error") {:noreply, assign(socket, results: %{"error" => "Failed to call optimizer"})} end end [/code] Мои журналы указывают: [b] Тайм -аут в запросе API Phoenix: [/b] [list] [*] Ошибка API оптимизатора :: Тайм -аут < /li> Пере процесс Python. Частичные данные: "" [b] скрипт Python не отправляет никаких выводов до тайм -аута: [/b] [*] Полный необработанный ответ от Python: "" [*] Вывод сырого питона: "" Что происходит? li> Он отправляет ввод JSON. < /li> Python не отправляет выход до тайм -аута. < /li> Время запроса API OUT перед Python может вернуть данные. [*] Phoenix закрывает соединение, в результате чего Python выходит из строя с BrokenPipeError. [/list]
У меня есть файл html.heex, который имеет как статический тег, так и динамическую текстовую область, обозначенную следующим образом . Я сталкиваюсь с проблемами, когда пытаюсь стилизовать их обоих независимо. У меня такое ощущение, что проблема...
У меня есть файл html.heex, который имеет как статический тег текстовой области, так и динамическую текстовую область, обозначенную следующим образом . Я сталкиваюсь с проблемами, когда пытаюсь стилизовать их обоих независимо. У меня такое ощущение,...
Итак, вот чего я пытаюсь достичь:
Я пытаюсь создать так называемую документацию быстрого производства, которая включает в себя несколько элементов, созданных с помощью одной и той же карты. код> . Пример:
LOGICALREF | NAME | MAINPRODREF (Id of the...
Итак, вот чего я пытаюсь достичь:
Я пытаюсь создать так называемую документацию быстрого производства, которая включает в себя несколько элементов, созданных с помощью одной и той же карты. код> . Пример:
LOGICALREF | NAME | MAINPRODREF (Id of the...
Я работаю над вариантом использования, в котором мне нужно прочитать данные, созданные из таблицы Phoenix, с использованием Hbase API . Однако при чтении данных из Hbase API я получаю данные в закодированной форме.
Все имена столбцов имеют формат...