具有单个通道的简单用户 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) ~/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上
我已经启动了许多Phoenix项目,但我总是发现正确定义Contexts具有挑战性。我经常最终在上下文中创建“子上下文”,我认为这很好,但它从来都不是完美的。
我的问题是人们对于定义 Phoenix 上下文有什么建议?或者某种在上下文之间划线的试金石。
举个例子:
我有一个与 Slack 的 API 集成的应用程序,并使用 Google 的地图 API 查找时区/位置信息,并使用 Stripe 进行付款。
此时我基本上是通过第三方工具分离上下文,但最终得到了过于臃肿的 Slack 上下文。一旦应用程序建立起来,重新构建一个人的观点并重新定义上下文也具有挑战性。
我正在尝试使用新属性和与现有列交互的数据库调用来更新现有模型。类似于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) 我有一个使用 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 …
我在 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 …
在我的混音项目中,每次启动 Iex 时我经常需要做各种各样的事情alias。import
有没有地方可以放置这些标准命令,这样我就不必每次都键入它们?
这是一个phoenix项目。
当用户的浏览器积累了太多 cookie 时,我的 Phoenix 应用程序开始对某些页面请求给出 431 错误响应。(我们的网站是一个非常大的域的子域,许多 cookie 是在顶级域上全局设置的。)如何配置我的应用程序以允许更长的标头以避免此错误?
如何在Phoenix 框架中为命令指定自定义服务器端口?mix ecto.create
我使用命令创建了一个入门项目mix phx.new hello。hello\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 的命令?
我不知道如何正确进行检查以向用户隐藏操作
<%= 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 ×10
cowboy ×1
ecto ×1
http-headers ×1
nginx ×1
postgresql ×1
redirect ×1
ubuntu ×1
websocket ×1