返回到“ws://localhost:4000/ws”的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:404
但是我在/ws端点上有套接字,对吗
var socket = new Socket("localhost:4000")
socket.connect()
它应该能够连接到该端点,但由于某种原因,它根本无法到达该端点
[info]运行Sapphire.Endpoint并打开Cowboyhttp://localhost:4000@JoséValim找到了解决方案
标签: Elixir
rpcerlang-supervisormnesia
我是这样测试节点间函数调用(rpc)的:
defmodule RpcTest do
def run do
Task.Supervisor.async( {DBServer.DistSupervisor, :'dbserver@hostname'}, fn -> "test" end)
|> Task.await
|> IO.inspect
end
end
然后我运行dbserver节点,在dbserver中调用Task.Supervisor
我想了解在Repo.preload所做的查询中,为什么会有orderby子句
App.Repo.get(Sopitas.Continent, 1) |> App.Repo.preload(:countries)
执行的查询包括:
[debug] QUERY OK source="continents" db=0.4ms
SELECT c0.`id`, c0.`name`, c0.`sm_id`, c0.`inserted_at`, c0.`updated_at`
FROM `cont
标签: Elixir
phoenix-frameworkecto
在我的上下文中,我有以下预加载所有者和受让人,它们都属于用户
def list_tasks do
Repo.all(Task)
|> Repo.preload([:owner, :assignee])
end
在我的索引控制器中,我有如下内容:
def index(conn, _params) do
tasks = Issue.list_tasks()
IO.inspect(tasks)
render(conn, "index.json",
我有一个路由器插头
defmodule Rest do
use Plug.Router
import Plug.Conn
plug :match
plug :dispatch
get "/hello" do
send_resp(conn, 200, "Hello, world!")
end
match _ do
send_resp(conn, 404, "oops")
end
def start do
Plug.Adapters
假设我想对文本进行模式匹配。具体来说,我想在第一个字母上进行模式匹配
例如,如何创建一个匹配“about”和“analog”但不匹配“beta”的模式
我试过这个:
defmodule MatchStick do
def doMatch([head | tail]) when head == "a" do 1 end
def doMatch([head | tail]) do 0 end
end
res = MatchStick.doMatch("abcd");
我还尝试了角
我在玩长生不老药和外星人的东西。我想创建自定义SQL查询,它使用一些特定于postgres的功能(在本例中:它搜索postgres数组)
以下是我想做的:
iex(5)> query = from g in MyModel, where: "'sample_tag' = ANY(tags)", select: g #Ecto.Query<from g in MyModel, where: "'sample_tag' = ANY(tags)", select: g>
iex
我们如何在测试数据库中预加载数据以进行集成测试,就像在RubyonRails中一样,我们有用于集成测试的装置。
在Phoenix中编写测试用例有什么好的文档吗?对于集成测试,您可能想看一看,它类似于Capybara for Elixir。他们有一些很好的例子让你开始学习
据我所知,在菲尼克斯并没有像在轨道上那样装载固定装置的标准方式。我个人的观点是,最好只对每个测试用例进行最小的设置,而不是复杂的全局装置。它使您更容易看到实际测试的内容,以及哪些装置与当前测试用例真正相关。我想说的是,最好花时间
假设我有一系列函数
%{key1: "value 1", key2: "value 2"}
|> CustomModule.func1
|> CustomModule.func2
|> CustomModule.func3
如何将返回值分配给变量(如final\u result),然后在case语句中使用它或进一步测试它?您可以使用=
final_result = %{key1: "value 1", key2: "value 2"}
|> CustomModule.f
我正在尝试测试一个控制器,它期望使用phoenix框架上传文件。我在phoenix guides()上遵循了指南,它可以在浏览器中运行,但是我在为它编写测试时遇到了问题。以下是我所做的:
test“POST photo”do
{:好的,raw_file}=file.read“1528_27.jpg”
conn()|>post(“/api/v1/originals”,%{:image=>raw_file})
#做一些断言
结束
问题是,在控制器中,我的文件永远不会变成%Plug.Uploadst
我正在阅读凤凰城的编程书籍,我想知道def和defp之间的区别是什么
在我的控制器中有几个功能-其中大多数是这样的操作:
def new (conn, _params) do
...
end
defp user_videos(user) do
...
end
这本书让我在此控制器中创建了另一个函数,它不是一个典型的控制器操作,如下所示:
def new (conn, _params) do
...
end
defp user_videos(user) do
...
end
因此,我的问题
我试图配置它,如何斐波那契工作,并有以下代码
defmodule FibSolver do
def fib(n) do
fib_calc(n)
end
defp fib_calc(0) do
IO.puts "Zero"
0
end
defp fib_calc(1) do
IO.puts "One"
1
end
defp fib_calc(n) do
IO.puts n
fib
我对Elixir中的二进制文件和字符串感到困惑。我有一个功能。它返回表示字符串的二进制字符代码,但我不知道如何以易读的方式打印该字符串。我曾考虑将二进制文件转换为字符列表,然后枚举字符列表,并将每个字符转换为字符串,但这似乎需要大量的工作。有更好的办法吗?试试看
iex(1)>a=“你好”世界
iex(2)>String.chunk(a,:可打印)
[“你好”,“世界”]
请粘贴问题中的代码。除了@Brandon的答案,请参阅我对类似问题的回答:最后我提到IO.inspect binary,[{
有没有办法在Elixir中重构它,使它更具可读性
def validate(params) do
Repo.start_link
if validate_oauth_params(params) === true do
oauth_client = Repo.get_by(OauthClient, random_id: params["client_id"], secret: params["secret"])
if oauth_client !=
我在elixir中有以下代码,我想在循环中调用函数-parseCsvFiles:
def loopParseFiles do
spawn(Parse_Csv,:parseCsvFiles,[self])
receive do
{:parse_complete} -> loopParseFiles
after
20000 -> loopParseFiles
end
end
在上面的代码中,我想设置一个延迟,使l
我在/users/:user_id/…下有几个嵌套路由,其中的控制器需要用户。在所有这些控制器中,我有以下代码。但我不想在所有这些控制器中都有相同的代码,而只是在一个地方。应该把它放在哪里?我怎样才能把它擦干
defmodule MyApp.XyzController do
使用MyApp.Web,:controller
插件:分配用户
[...]
defp分配用户(连接,选择)do
凯斯康涅狄格州
%{“用户id”=>用户id}->
case Repo.get(MyApp.User,User_
您可以通过在Erlang模块中添加冒号来调用函数:
:erlang.time()
…但是,在中描述的符号在哪里
我之所以这么问是因为我更喜欢使用纯文档来掌握长生不老药,但我显然需要一些初始引导信息来理解关键位是如何组织的。我认为没有直接说明。每个Erlang模块的名称都是一个atom。在字符串前面加冒号表示该字符串是原子:模块。函数只解析为Erlang中模块中的特定函数 这些信息是众所周知的,但在参考文档中没有提到,因为在参考文档中,您有纯长生不老药专用的东西
只需检查一下屏幕。对您来说,最有效
我正在学习长生不老药,但在一个概念上遇到了困难。考虑下面的代码:
iex(3)> case 1 do
...(3)> x -> "x exists"
...(3)> _ -> "something exists"
...(3)> end
"x exists"
iex(4)> x
** (CompileError) iex:4: undefined function x/0
变量x尚未绑定到任何对象,那么第一个
我缩小了问题的范围,因为问题太大了。代码如下:
defmodule MayRaiseGenServer do
use GenServer
def start_link do
IO.puts "started MyServer, name is #{__MODULE__}"
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
def maybe_will_raise do
GenServ
标签: Elixir
phoenix-frameworkphoenix-channels
我有一个链接可以删除当前用户的会话
<%= link "Logout", to: session_path(@conn, :delete, current_user.id), method: :delete, class: "button alert" %>
由于某种原因,它无法工作,尽管当我将链接更改为按钮时,一切似乎都正常工作
<%= button "Logout", to: session_path(@conn, :delete, current_user.id),
如何在phoenix项目中加载JSON fixture文件
当我尝试类似Application.app\u dir(我的应用程序“priv”)的东西时,它会给我一个编译路径,我不能在测试中使用它
是否有其他方法从“test/support/somefile.json”加载夹具文件?您可以使用\uuuuuu DIR\uuuu和路径。展开/2。例如,如果您的测试在test/controllers/page\u controller\u test.exs中,则可以使用以下方法获取test/suppor
试图学习使用elixir进行基本代码测试,但在测试异步函数(genserver的handle_info和cast)时遇到了困难
一种有效但感觉不正确的方法是在抛出异步函数后使用:timer.sleep(x)
例如,想象一下,handle\u cast正在处理来自state的项目列表,并将调用发送到另一个模块,该模块将从外部API获取数据,完成后,它将向同一个genserver发送消息(API数据)
最好的测试方法是什么?我可以在测试中监视genserver邮件/邮箱吗
编辑:
另一个例子是,在i
我在不同的作用域/文件夹中有两个类似的控制器:
MyApp.Controller1
MyApp.Namespace1.Controller1
及
如何在这些控制器中的url或路径帮助程序中引用:index 根据您的phoenix.routes,这些电话分别是:
some_path(MyApp.Endpoint, :index)
some_path(MyApp.Namespace1.Endpoint, :index)
详情请参见章节。根据您的phoenix.routes,这些电话分别是:
so
我正在将Phoenix从1.0更新到1.2
我按照步骤从1.0升级到1.1,然后从1.1.x升级到1.2.0
每当我尝试编译时,都会出现以下错误:
Unchecked dependencies for environment dev:
* phoenix_pubsub_redis (Hex package)
the dependency does not match the requirement "~> 2.1", got "1.0.0"
* phoenix_html (Hex pa
我对原子以及如何使用原子感到困惑
老实说,我正在阅读文档,只是不理解原子:(
有人能提供一些例子或东西来解释这一点吗
谢谢你可能想得太多了。一个原子只是一个值。就像真和假都只是值一样,你现在可以用任何词作为值。事实上真,假和零都是隐藏的原子
您可以传递原子,而不是将字符串作为内部消息传递给应用程序。您可以使用原子,而不是将字符串用作映射或关键字列表的键
原子有一个非常大的警告,它们永远不会被垃圾收集,因此您永远不应该通过编程方式(从用户输入或其他方式)生成原子,否则,如果创建的原子太多,您就有溢
我是新来的凤凰,长生不老药。我试图在new.html.exx的text_字段上获取params[:task_id],类似于下面的rails代码
<%= f.text_field :task_id, value: params[:task_id] %>
我尝试使用IEX.pry并得到以下结果,但我无法将其应用于文本输入值
pry(3)> conn.params["task_id"]
"1"
也尝试了下面的代码,但没有运气
<%= text_input f, :task
我想存储从Repo.get(MyModel,id)返回的exto.Schema结构
像\uuuu meta\uuuu,关联:之类的东西会阻止jsonification,所以我捕获了一个异常(这是合理的)。是否有任何exto本机函数仅获取记录列的映射,我可以将其序列化并存储在数据库中?由于我不知道任何用于此目的的exto本机函数,我想您应该使用:
筛选不需要的密钥:
并将结果设置为:
编辑:看起来您可以在查询中使用“map()”来返回映射,而不是结构:我的解决方案
defmodule MyA
我有一个与某个二进制值匹配的函数:
def parse(<<timestamp::binary-size(4)>>) do
IO.inspect timestamp
end
def parse()do
检查时间戳
结束
不幸的是,我真正的“模式”比这长得多。是否可以存储该模式并在以后匹配
@pattern <<timestamp::binary-size(4)>>
def parse(@pattern) do
IO.insp
我通过如下命令生成了一个模型:
mix phoenix.gen.html Project projects title:string
我想撤消此操作(删除已创建的所有文件/数据库记录):
与手动删除所有文件相比,是否可以使用命令来执行此操作?如果是这样的话,这个命令是什么
例如:在Rails中,您可以执行Rails d scaffold…来撤消Rails g scaffold命令
另一个选择是使用我的版本控制系统(git)来实现这一点;但是,一个删除mix phoenix.gen.html生成
我有一个简单的项目,我已经开始调用测试。所以我做了:
mix new test
我得到了通常的目录树。在lib目录中,是test.ex。但是我希望test.ex使用一个名为Mystuff的模块,但是我不知道把Mystuff.ex放在哪里,因为我得到了一个编译错误
下面是test.ex(在test/lib目录中):
下面是我在test/lib中也包含的mystuff.ex:
defmodule Test.Mystuff do
def bye do
IO.puts "bye"
en
我在iex>中更新我的@doc以测试它的外观。我遇到的问题是,我必须退出iex才能查看更新的@doc文档。使用r()时,是否有方法重新加载模块@doc变量
更新@doc以返回:none而不是:falls_town并保存文件
iex> r(Coordinate)
iex> h Coordinate.island/1
# issue: still showing the old @doc example
## Examples
iex> {:ok, coo
标签: Elixir
phoenix-frameworkecto
在我的项目中,我有相当多的模型层次关系。在控制器中,我有以下内容:
var1 = Repo.get!(Model1, 123) |> Repo.preload([child_items1: :child_items2])
这很好,但我必须更深一层
即每个子项2多个子项3。现在,如何为每个子项2预加载子项3?我通常使用作用域。例如,在我的模型(1)中,我将有一个with_model2函数预加载model2。因此,要连续加载3个关联,我会有如下内容:
def with_model2(que
有一个生产者,由值列表初始化
defmodule GenstageExample.Producer do
use GenStage
require Logger
def start_link(initial \\ 0) do
GenStage.start_link(__MODULE__, initial, name: __MODULE__)
end
def init(el_list) do
Logger.info "producer init #{insp
我写了一个宏,我想在其中使用Logger.info,所以我需要Logger。这样做的最佳实践是什么?强制客户机自己需要记录器,或者在那里添加using宏和require Logger。记录器调用是否需要在宏中?也许宏可以扩展为对模块的函数调用,然后进行日志记录
如果确实需要从宏扩展执行日志记录,那么我会使用宏添加一个\u,以要求依赖项和您的模块。最好的做法是不要突然从宏记录日志。作为宏的用户,我可能不希望日志被无关信息污染。另一方面,拥有这样一种选择加入的能力可能是一种重要的选择。也就是说,我将
我正在尝试创建一个表示固定长度的框架二进制数据包的typespec。因此,使用固定N字节的位字符串(例如25字节)似乎是正确的想法
Elixir typespec文件规定如下:
## Bitstrings
| <<>> # empty bitstring
| <<_::size>> # size is
我正在寻找一种方法,允许我在Elixir中的列表上创建一个滑动窗口,如下所示:
[1,2,3,4,5,6]
|> Enum.magic_function(2)
--> [[1,2],[2,3],[3,4],[4,5],[5,6]]
类似于chunk\u every函数,但每次的移位为1。您可以使用的第三个参数指定在每个chunk之后要跳过多少个元素(此处为1),第四个参数告诉它,如果最后一个chunk小于指定的长度,则丢弃最后一个chunk
iex(1)> [1, 2, 3,
在执行以下代码之后:
File.touch("testfile")
file = File.open!("testfile", [:write, :utf8])
IO.write(file, "My pretty text")
在操作系统终端中读取文件时,我看到额外的%字符。
但是当我用文本编辑器打开一个文件时,我看不到这个字符。
有人能给我解释一下为什么我会看到这个角色吗
这是zsh告诉您在输出的末尾没有换行符
我不使用zsh,但您可能可以使用echo-n“test”
IO.write(fi
以下内容会引发错误
iex(121)> val_map = %{"pri" => %{"tit" => "name1"}}
iex(122)> fp = fn (new_map) -> Map.get(new_map, "pri") end
当您在地图上迭代时,它会将其转换为关键字列表(即使用元组):
在您的情况下,需要匹配元组的键部分:
Enum.each %{a: 1, b: 2, c: 3}, fn {key, value} ->
IO.put
标签: Elixir
phoenix-frameworkelixir-mix
我试图从脚本中混合使用许多phx.gen.html命令,但只执行第一个命令。我尝试了不同的方法,其中一些方法如下,但没有任何效果:
Mix.Task.run "phx.gen.html", Parser.parse "Contacts Skype skypes user_id:references:users skype --parent user"
Mix.Task.run "phx.gen.html", Parser.parse "Contacts Phone phones user_id:
标签: Elixir
phoenix-frameworkdry
我需要配置OAuth协议,这样做的逻辑位置在/config/dev.exs中,不是吗
就在上面,我配置了端点。因此,在我的应用程序中,我可以编写Project.Endpoint.static\u url()并获取例如http://localhost:4000
在配置中获取此值的干燥方式是什么
config :project, Project.Endpoint,
http: [port: 4000],
url: [scheme: "http", host: "localhost", por
我想复制ca文件以建立ssl连接。我正在将ca放入lib
lib/
mymodule.ex #using the ca path here
mycrt.crt
然后使用mix firmware我给出了如下的相对路径
def getPath() do
{path,0} = System.cmd("pwd",[])
String.replace(path,"\n","/lib/mycrt.crt")
end
但是我们在主机上运行时使用的是iex-smix,所以
标签: Elixir
phoenix-frameworkecto
我今天有一个相当有趣的问题。我正试图使用EXTO函数Repo.insert_all/2将CSV文件批量插入到我的数据库中。然而,有一件事困扰着我
在我的上下文中,问题在于以下代码:
defmodule AppName.Roles do
def bulk_insert(array_of_maps) do
try do
Repo.insert_all(Role, array_of_maps)
rescue
exception in Postgrex.Er
我正在使用Comeonin的5.1.2版来散列密码。声明说bcrypt_elixir或argon2都是兼容的哈希库。我遇到的问题发生在这两个方面
如果我尝试使用文档推荐的Argon2.hash\u pwd\u salt,我会得到以下错误:
** (UndefinedFunctionError) function Comeonin.Argon2.hash_pwd_salt/1 is undefined or private. Did you mean one of:
* hashpwsalt
假设我有一个结构列表,其中一个键是id:
users = [
%User{id: 1, attempts: 5},
%User{id: 2, attempts: 12},
%User{id: 3, attempts: 2}
]
使用id==2将用户的尝试次数更新到99次以获得新用户列表的最佳方法(最有效的方法)是什么:
updated_users = [
%User{id: 1, attempts: 5},
%User{id: 2, attempts: 99},
%Us
我使用Atom作为项目的代码编辑器,它不断更改我的文件保存权限。具体地说,它增加了执行权限
这是Phoenix Elixir web项目,Atom在Windows上运行,但我使用WSL执行gitting并运行本地服务器
我分别检查了Atom设置和已安装的社区Atom软件包的设置,但没有发现影响权限的内容
在我的Atom上安装的社区软件包:Atom beautify、Atom elixir、Atom elixir formatter、language elixir这可能是一些兼容性方面的解决办法
我试图找到奇数、偶数和可被1-100中的3个数字整除的数,但我找不到一种方法将enum.list_分配到1100以使其在50处停止显示
这就是我要做的。我只是分配变量,以便在变量后面创建一个场景
num = (Enum.to_list 1..100)
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37、3
我在读一本书“编程凤凰>=1.4”,书中的“测试注销用户”(集成测试,第161页)。测试失败
视频控制器测试.exs
defmodule RumblWeb.VideoControllerTest do
use RumblWeb.ConnCase, async: true
test "requires user authentication on all actions", %{conn: conn} do
Enum.each([
标签: Elixir
phoenix-frameworkecto
我正在阅读有关Phoenix contexts()的指南,在您运行的部分
mix-exto.gen.migration将作者id添加到页面
然后在迁移中添加一些内容。以下是完整的输出:
$mix-exto.migrate
**(RuntimeError)找不到#PID的迁移运行程序进程
(exto_sql 3.5.3)lib/exto/migration/runner.ex:100:exto.migration.runner.prefix/0
(exto_sql3.5.3)lib/exto/m
我有多个控制器方法,其中我与即将到来的参数进行模式匹配,其中一个是
def index(conn, %{
"id" => camera_exid,
"from" => from,
"to" => to,
"limit" => "3600",
"page" => _p
标签: Elixir
phoenix-frameworkphoenix-channels
在文档中有此示例,但它仅适用于断开连接
使用Phoenix.Socket
频道“房间:”,MyAppWeb.RoomChannel
def connect(参数、套接字、连接信息)do
{:好的,分配(套接字,:user_id,params[“user_id”])}
结束
def id(socket),do:“users_socket:#{socket.assigns.user_id}”
结束
#断开所有用户的套接字连接及其多路复用通道
MyAppWeb.Endpoint.broadcast(“
上一页 1 2 ...
26 27 28 29 30 31 32 ...
下一页 最后一页 共 125 页