标签: phoenix-framework

与 phoenix 应用程序的随机额外 websocket 连接?

具有单个通道的简单用户 Websocket。我几乎从凤凰指南的“如何”部分复制了这个代码字。

在此输入图像描述

第一个请求是我的 - 它包含来自 facebook 登录响应的用户身份验证令牌。正如您所看到的,它来自phoenix.js文件并且工作得很好...我能够发送和接收消息 - 没问题。

第二个似乎完全来自其他地方,我不知道为什么!?

frame.js这不是我的文件,所以一定是某种node_module依赖性的一部分,js被压缩成一行并且不完全清晰。

我每隔 5 秒左右就会在日志中收到此信息:

phoenix_1  | [info] CONNECT GametimeWeb.UserSocket
phoenix_1  |   Transport: :websocket
phoenix_1  |   Connect Info: %{}
phoenix_1  |   Parameters: %{"token" => "", "vsn" => "2.0.0"}
phoenix_1  | :invalid - this is the response the socket returns I have jsut inspected it and printed to logs.
phoenix_1  | [debug] invalid
phoenix_1  | [info] Replied GametimeWeb.UserSocket :error
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

凤凰1.4.10

用户套接字:

defmodule GametimeWeb.UserSocket do
  use Phoenix.Socket

  require Logger …
Run Code Online (Sandbox Code Playgroud)

elixir websocket cowboy phoenix-framework phoenix-channels

1
推荐指数
1
解决办法
212
查看次数

无法运行 Phoenix 服务器。找不到 erlang/lib/parsetools-2.1.8

~/Desktop/phoenix_sandbox/app$ mix phx.server
==> gettext
Compiling 1 file (.yrl)
/usr/lib/erlang/lib/parsetools-2.1.8/include/yeccpre.hrl: no such file or directory

could not compile dependency :gettext, "mix compile" failed. You can recompile this dependency with "mix deps.compile gettext", update it with "mix deps.update gettext" or clean it with "mix deps.clean gettext"
Run Code Online (Sandbox Code Playgroud)

我一直在绕着错误转圈。我安装了“解析工具”(无论它是什么)。如果我执行“mix deps.clean gettext”,它会让我原地踏步,并且得到同样的错误。我在Ubuntu上

ubuntu elixir phoenix-framework

1
推荐指数
1
解决办法
2430
查看次数

Phoenix/Elixir:何时创建新上下文的提示

我已经启动了许多Phoenix项目,但我总是发现正确定义Contexts具有挑战性。我经常最终在上下文中创建“子上下文”,我认为这很好,但它从来都不是完美的。

我的问题是人们对于定义 Phoenix 上下文有什么建议?或者某种在上下文之间划线的试金石。


举个例子:

我有一个与 Slack 的 API 集成的应用程序,并使用 Google 的地图 API 查找时区/位置信息,并使用 Stripe 进行付款。

  1. 我从 Slack Context 开始,但很快发现我将 Slack API 逻辑与应用程序的实际业务逻辑混合在一起。
  2. 我将所有 Google 地图内容放在 Google Context 下
  3. 我将所有 Stripe 内容放在 Payments Context 下

此时我基本上是通过第三方工具分离上下文,但最终得到了过于臃肿的 Slack 上下文。一旦应用程序建立起来,重新构建一个人的观点并重新定义上下文也具有挑战性。

elixir phoenix-framework

1
推荐指数
1
解决办法
1533
查看次数

如何使用片段作为更新变更集属性的一部分?

我正在尝试使用新属性和与现有列交互的数据库调用来更新现有模型。类似于UPDATE companies SET a = 1, b = jsonb_set(b, '{key}', CURRENT_TIMESTAMP(), true)SQL 中的东西。

我如何使用 Ecto 和片段来实现这一目标?

这是我的尝试,但它失败了,因为它fragment是一个宏:

enhanced =
  %{ attrs | b: fragment(
    "jsonb_set(b, ?, CURRENT_TIMESTAMP(), true)",
    "{#{Atom.to_string(key)}}"
  )}
result =
  company
  |> Company.changeset(enhanced)
  |> Repo.update()
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

1
推荐指数
1
解决办法
1361
查看次数

Nginx 重定向到 Phoenix 丢失授权标头

我有一个使用 Cloud Run 部署的 Phoenix 框架应用程序,有多个客户端使用它。

由于 Cloud Run 后台任务限制,我想将部署移至 Computer Engine,但我不想强制客户端更新其应用程序(即后端 url)。

因此,我认为我可以在 Cloud Run 中部署一个 Ngnix 实例,将所有内容重定向到 Compute Engine。

问题是我使用的授权请求标头无法到达 Phoenix 连接。我已经用不同的服务器(Python simpleserver)尝试过,它正确地接收了每个标头。

所以,问题是。Phoenix 框架是否会过滤掉来自重定向的某些请求标头?

标题是: {"authorization", "Bearer XXX"}

ngixn.conf 很简单:

server {
    listen 80;
    return 301 http://0.0.0.0:4000$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

检查conn.req_headers

$curl -L --location --request GET 'http://localhost:80' \
--header 'Content-Type: application/json' --header 'other: whatever'  \
--header 'Authorization: Bearer XXXX' \
--data-raw ''`
Run Code Online (Sandbox Code Playgroud)

检查给出:

[
  {"accept", "*/*"},
  {"content-type", "application/json"},
  {"host", "0.0.0.0:4000"},
  {"other", "whatever"},
  {"user-agent", "curl/7.54.0"}
]
Run Code Online (Sandbox Code Playgroud)

如果直接使用 curl …

redirect nginx elixir phoenix-framework

1
推荐指数
1
解决办法
1201
查看次数

使用不带跨度或不同类的 error_tag

我在 Phoenix 应用程序中使用Tailwind CSS 2.0 。表格中的内容error_tag让我很头疼:

<div>
  <label for="password" class="block text-sm font-medium text-gray-700">
    Passwort
  </label>
  <div class="mt-1">
    <%= password_input f, :password, required: true, id: "password", type: "password", 
        autocomplete: "new-password", 
        class: "appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md 
                shadow-sm placeholder-gray-400 focus:outline-none focus:ring-indigo-500 
                focus:border-indigo-500 sm:text-sm" 
    %>
    <p class="mt-2 text-sm text-gray-500"><%= error_tag f, :password %></p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

结果是这样的 HTML:

<p class="mt-2 text-sm text-gray-500">
<span class="invalid-feedback" phx-feedback-for="user_password">
  should be at least 8 character(s)
</span>
</p>
Run Code Online (Sandbox Code Playgroud)

和这个渲染:

在此输入图像描述

问题:我可以强制error_tag …

elixir phoenix-framework

1
推荐指数
1
解决办法
1378
查看次数

IEx 启动时如何导入/别名内容?

在我的混音项目中,每次启动 Iex 时我经常需要做各种各样的事情aliasimport

有没有地方可以放置这些标准命令,这样我就不必每次都键入它们?

这是一个phoenix项目。

elixir phoenix-framework

1
推荐指数
1
解决办法
400
查看次数

当标题长度超过约 4000 个字符时,Elixir Phoenix 应用程序返回 431 错误

当用户的浏览器积累了太多 cookie 时,我的 Phoenix 应用程序开始对某些页面请求给出 431 错误响应。(我们的网站是一个非常大的域的子域,许多 cookie 是在顶级域上全局设置的。)如何配置我的应用程序以允许更长的标头以避免此错误?

elixir http-headers phoenix-framework

1
推荐指数
1
解决办法
777
查看次数

Phoenix框架:如何使用自定义端口运行ecto.create?

如何在Phoenix 框架中为命令指定自定义服务器端口mix ecto.create

我使用命令创建了一个入门项目mix phx.new hellohello\config\dev.exs我在路径中配置数据库如下,

config :hello, Hello.Repo,
   username: "postgres",
   password: "postgres",
   hostname: "localhost",
   database: "hello_dev",
   show_sensitive_data_on_connection_error: true,
   pool_size: 10
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用该命令配置Postgres 数据库mix ecto.create时,出现以下错误。

** (DBConnection.ConnectionError) tcp connect (localhost:5432): connection refused - :econnrefused
Run Code Online (Sandbox Code Playgroud)

我使用5433作为 Postgres 端口(注意:它适用于我的 spring java 项目),因为默认端口 5432 在我的本地不可用。

所以在hello\deps\ecto_sql\lib\ecto\adapters\postgres\connection.ex路径中我定义了路径中的默认端口,如下所示,

@default_port 5433
Run Code Online (Sandbox Code Playgroud)

但如果我再次运行该命令,它仍然尝试连接到 5432。

如何获取连接到 5433而不是 5432 的命令?

postgresql elixir phoenix-framework

1
推荐指数
1
解决办法
1335
查看次数

函数 nil.id/0 未定义 - Elixir、Phoenix

我不知道如何正确进行检查以向用户隐藏操作

<%= if @current_user.id == @post.user_id do %>
  <span>
    <%= link "Edit", to: Routes.post_path(@conn, :edit, @post) %>
  </span>
  <span>
    <%= link "Delete", to: Routes.post_path(@conn, :delete, @post), method: :delete, data: [confirm: "Are you sure"] %>
  </span>
<% end %>
Run Code Online (Sandbox Code Playgroud)

当用户未登录时,出现此错误:

GET/posts/1函数中的 UndefinedFunctionErrornil.id/0未定义

elixir phoenix-framework

1
推荐指数
1
解决办法
239
查看次数