分配[9]的单个列表将返回'\t'。原因是什么?有关数据类型的详细信息,请使用:
iex> num = [9]
'\t'
如果要检查原始表示,可以将char\u list:false传递到inspect:
iex> i [9]
Term
'\t'
Data type
List
Description
This is a list of integers that is printed as a sequence of characters
delimited b
如何在Elixir中复用套接字?我需要连接到核心银行,但它只接受一个tcp连接,我的应用程序收到了许多并发连接。有什么建议吗?我会将整个套接字处理打包到GenServer中,然后它将充当网关,一次只处理一条消息。例如:
defmodule Client do
use GenServer
@name __MODULE__
# API
def start_link do
GenServer.start_link(__MODULE__, :ok, [name: @name]
你有什么建议可以让这个更干净吗
视频参数来自表单提交,因此地图为%{“url”=>“…”,“title”=>“里约热内卢的卡内瓦尔”,…}
以下是我的create方法(如果有任何用处):
def create(conn, %{"video" => video_params}, user) do
changeset =
user
|> build_assoc(:videos)
|> Video.changeset(video_para
我正在用elixir编写一个非常简单的分布式缓存(只是一个PoC,没有什么真正重要的)。
想法很简单,我有n个节点(每个节点包含一个区域或缓存分区)和1个orchestrator节点。
每个请求都会发送到orchestrator,orchestrator会选择一个节点(基于键)并将其写入。
也就是说:若req是一个PUT,orchestrator计算一个节点并写入它;
若req是GET,则orchestrator计算该键应该在哪里,并从该节点读取。
总体而言,该系统正在运行。我还为orchest
标签: Elixir
phoenix-frameworktimex
我试图解析一个日期并将其保存到一个表中。下面是函数:
defp string_to_datetime(string) do
result = string
|> String.split(";")
|> List.last
|> Timex.parse("{0M}/{0D}/{YYYY} {h12}:{m} {AM}")
case result do
{dt, _} -> dt
:e
我刚刚介绍了Elixir的基础知识,并决定从元编程中获得一些乐趣。在Chris McCord的书中,有一个定义我们自己的除非构造的例子:
defmodule ControlFlow do
defmacro unless(expression, do: block) do
quote do
if !unquote(expression), do: unquote(block)
end
end
end
我似乎无法理解部分,除非(表达式,do:block)部分。我
我正在尝试将日期时间转换为特定格式:
Timex.format!(my_date_time, "%a, %d %b %Y %H:%M:%S %z"))
它抛出一个异常:
got {:format, "Invalid format string, must contain at least one directive."}
while retrieving Exception.message/1 for %Timex.Format.FormatError{message:
{:forma
标签: Elixir
phoenix-frameworkecto
我有一个记录ID的列表-[9,1,4,3]
我想从postgresql中检索记录,并希望它们按此ids列表中的顺序排列。但当我进行查询时,记录会以任意顺序返回:
Ecto.Query.from(r in Record, where: r.id in [9, 1, 4, 3])
|> Repo.all()
|> Enum.map(&Map.get(&1, :id)) # => [4, 9, 1, 3]
如何检索相同顺序的记录?我认为在数据库中没有任何简
我正在尝试使用我认为非常基本的ecto查询来获取两个unix时间戳之间的记录。大致如下:
b = Ecto.DateTime.from_unix!(begin_utc_epoch, :second) |> DateTime.to_naive
e = Ecto.DateTime.from_unix!(end_utc_epoch, :second) |> DateTime.to_naive
query = from r in MyModel,
where r.inserted_at
我有以下资料:
defmodule ApiWeb.Helpers.Oapi do
import Plug.Conn
use Tesla, only: ~w(get)a
require Logger
plug Tesla.Middleware.BaseUrl, "example.com"
def client(conn) do
Tesla.build_client [
{Tesla.Middleware.Headers, %{"Authorization
如何使用Enum函数在Elixir中将两个数组合并在一起
例如
组合数组(添加列)应如下所示:
combined = [[1.0, 2.0, 1.0],
[5.0, 3.0, 3.0],
[2.0, 4.0, 2.0],
[3.0, 1.0, 1.0],
[2.0, 2.0, 3.0],
[4.0, 3.0, 2.0],
您是否使用环境变量或prod.secret.exs存储密码、api密钥等?什么是经验法则?我觉得它们或多或少是一样的,因此不知道该用哪一个
请注意,我不想通过合并第三方服务使其复杂化
我的代码中的库。我想要一个开箱即用的解决方案,最好是。环境变量
它是否是凤凰/长生不老药并不重要
根据一套称为
12因素应用程序将配置存储在环境变量中(通常缩写为env vars或env)。Env-vars很容易在部署之间进行更改,而无需更改任何代码;与配置文件不同,它们被意外签入代码repo的可能性很小;与自定义
标签: Elixir
phoenix-frameworkecto
我最近开始与phoenix合作,事实上我通常不使用SQL数据库
我正在写一个经典的博客来整合关联。
我创建了一个基本的关联:
帖子属于一个类别
一个与许多职位相同的类别
以下是这些模式:
schema "categories" do
field :category_name, :string
field :logo, :string
has_many :posts, Lclp.Post
timestamps()
end
schema "posts" d
标签: Elixir
phoenix-frameworkecto
好吧,因为有多个层次的回报,我有点迷路了
我对埃克托很陌生,所以我来了
我正试图将我的帐户创建包装在一个事务中,因为它会创建许多子记录等
到目前为止,我有一个:
def create_account(company_name, ...) do
Repo.transaction(fn ->
case Account.create_account(%{
# ... attributes here
}) do
???
我在插入UUID列表以在查询中执行时遇到问题
Ecto.Adapters.SQL.query!(Repo, "
WHERE
some_id IN ($1)
", [some_list_of_ids])
这给了我一个错误**(ArgumentError)Postgrex需要一个16字节的二进制文件,得到[“4ca72ee7-61e2-4450-8dac-bdd7cf6b3df9”,“83640dcc-9674-462c-881b-0ce2ed8f3fba”…。即使我用UUID.str
标签: Elixir
elixir-mixbeam-release
我有下面的mix.exs
defmodule App.MixProject do
use Mix.Project
@version "0.1.0"
def git_ref(), do: System.get_git_hash()
def project do
[
app: :app,
version: @version,
...
releases: [
app: fn ->
我创建了一个新的phoenix项目,当我运行mix phoenix.server时
[错误]未找到后端端口::inotifywait
在我的控制台上用红色。这看起来很危险,而且,因为我还没有真正做过任何事情,这似乎是应该做的事情 您需要添加inotify后端。请参阅此处的自述文件,您应该尽快上路:
请阅读。在linux上:apt get install inotify tools。
以下代码是从曼宁出版的《长生不老药》中复制粘贴的
defmodule TodoList do
defstruct auto_id: 1, entries: HashDict.new
def new, do: %TodoList{}
def add(
%TodoList{entries: entries, auto_id: auto_id} = todo_list,
entry) do
entry = Map.put(entry, :id, auto_
标签: Elixir
phoenix-frameworkectoelixir-iex
我正在学习Phoenix和Elixir,我来自Ruby/Rails,在那里我在REPL工作,使用pry检查我的数据库和应用程序状态
我正试图找出如何在Phoenix应用程序中与我的数据库和模型交互。我知道iexiex,但我不知道如何使用它从repl检查我的应用程序的数据库。我是否需要每次从repl通过EXTO连接到它?是否有rails控制台等效设备。我已经查过凤凰城的文件,长生不老药的剂量,和异位反应,但找不到我要找的。我错过什么了吗
编辑:根据下面的答案,我找到了EXTO文档的一部分。基于此,
在Elixir的最新版本中,访问不再作为协议实现,而是作为一种行为实现。据我所知,这种变化是由开发模式中的性能考虑因素引起的
现在,看看实现,我想知道这在内部是如何工作的,为什么选择这个实现。正如我们所看到的,Access通过底层映射的“\uuuuu struct\uuuuuu”键分派到结构的模块。AFAICS,这与OOP风格的多态性大致相同。关于这一点,有几个问题:
为什么这样更快
与协议相比,有哪些缺点?据我所知,它的可扩展性较差。还有其他的吗
到目前为止,我只在GenServer这样的环境
我的PersonController中有一个show操作,即:
person = Repo.get_by(Person, nick: params["nick"])
page = Message
|> where([m], m.person_id == ^person.id)
|> where([m], m.hidden == false)
|> order_by([m], desc: m.created_at)
|> Repo.preload(:channel)
|&g
如果我正在编写一个传递给另一个函数的函数,有没有办法检查传递给我的函数的算术性,或者根据不同的算术性进行模式匹配?我可以使用is_函数/2来检查特定的算术数,但这将是一种难以获得数字的方法。您可以使用;它返回关于给定函数的一组信息,包括其算术性:
iex> :erlang.fun_info(fn -> :ok end)[:arity]
0
iex> :erlang.fun_info(fn(_, _, _) -> :ok end)[:arity]
3
正如我链接的文档所述
我试图永远在生产中运行我的Phoenix应用程序,即独立于终端进程。我在《凤凰城指南》和一个Stackoverflow问题中看到,我可以使用elixir--Distached,但我无法正确使用这些命令。事实上,我曾经能够像那样启动它,但我尝试了太多的命令,以至于我甚至不知道是哪一个命令(也因为没有明确的信息)。
那么,使用最新版本的Phoenix(1.1)和Elixir(1.1.1),以下命令是什么:
1) 永远启动服务器(作为守护进程);
2) 在不需要重新启动服务器的情况下停止服务器?我自己
我正在写一个快速灵丹妙药脚本,我想使用一个依赖项。创建一个新的混合项目只是为了为这个库添加依赖项管理,这似乎有点过头了。你推荐什么?对于一个带有依赖项的简单脚本,您会选择混合项目路线吗
编辑
注意:我不是问如何全局安装和访问依赖项。问题是,“你会走混合项目路线吗…”建议的方法是什么 走混合项目路线。快速和肮脏的脚本有一种成长为更大项目的方式 可以使用
例如:考虑:
# foo.ex
defmodule Foo do
def bar, do: "Barrrr"
end
然后,在同一目录中,放
似乎源于模式匹配的二进制字符串的部分被转换为整数:
iex(21)> <<type::size(8)>> = Base.decode16!("05")
<<5>>
iex(22)> type
5
iex(21)>=Base.decode16!("05")
iex(22)>类型
5.
我希望type仍然是一个普通的二进制字符串,因为毕竟应用程序知道二进制表示什么类型的数据
我无法找到将子字符串保持为二进制字符串的方法。这是Erlang
动态创建WOKER时,如何设置重启频率?在当前设置中,辅助进程无限期地重新启动
def start_child(input) do
Supervisor.start_child(@name, [input])
end
def init(:ok) do
children = [
worker(Kombiner.Foo, [], restart: :transient)
]
supervise(children, strategy: :simple_one_for_one
我创建了一个模块,如下所示:
defmodule Sum do
def sum(x,y) do
x + y
end
def sum(x) do
x
end
end
当然,它与我预期的模式匹配一样有效:
iex(2)> Sum.sum(3)
3
iex(3)> Sum.sum(3,5)
8
当我定义匿名函数时,如:
iex(1)> sum = fn
...(1)> x, y -> x + y
我正在使用凤凰城与外2.0。我非常惊讶,我可以将my_字段:map传递给生成器,它可以正确地使用map生成模型
它还生成了视图,字段只是字符串输入,验证失败,因为字符串不是映射
是否有将转换为地图的此字符串格式
我知道没有用HTML编辑地图的标准方法。只是好奇在生成的代码中自动解析字符串是否是个好主意。这样生成器将始终生成工作解决方案。为什么要使用映射类型作为字符串输入?EXTO映射类型将把elixir映射的确切内容存储到您的数据库中(在postgres的情况下,它将成为jsonb)。我使用单个
我有一个userscoontroller,我用它进行身份验证,而不是用来查看用户配置文件等等,所以我得到了
/users/new // GET
/users/new // POST
/users/login // GET
/users/login // POST
我想把这个重命名为
/auth/register
/auth/register
/auth/login
/auth/login
是否有可能通过路由器来实现这一点
现在我有这样的事情:
resources "/users", User
我为Elixir项目编写了一些测试,并将它们放在test/目录中。现在我运行了混合测试,我得到:
$ mix test
Test patterns did not match any file:
就这样,之后什么都没有了我必须手动设置测试路径吗?谷歌快速搜索没有发现任何信息
我的所有测试都是这样的:
所有测试都应以\u test.exs结束。将我的测试从some_module.exs重命名为some_module_test.exs修复了它,现在它可以工作了
从$mix help test:
标签: Elixir
csrfphoenix-framework
试图让阿贾克斯在凤凰城工作。我通过执行以下操作获得csrf令牌,因此我拥有它:
<input type="hidden" id="_csrf_token" name="_csrf_token" value="<%= get_csrf_token() %>">
两者都不会导致返回任何内容
令牌可通过请求通过密钥为“_csrf_token”的参数或名称为“x-csrf-token”的报头发送
尝试使用以下键设置标题:
x-csrf-token
谢谢。花了我几个小时。我的
我有以下伪查询
SELECT * FROM dummy_table
ORDER BY CAST(number_in_string AS DECIMAL)
如何在EXTO中编写它?您可以通过以下方式对U进行排序:
fragment("CAST(? as DECIMAL)", dt.number_in_string)
from(Post中的p,order_by:[asc:fragment(“CAST(?as DECIMAL)”,p.id)])生成以下查询:
选择p0.“id”,p0.“title
我想根据具体的错误设置一个赋值,比如说,什么是最好的方法?在我的情况下,返回的变更集是:
#Ecto.Changeset<action: :update,
changes: %{password: "blabla",
password_bcrypt: "$2b$12$s48wU....."},
errors: [password_confirmation: {"password incorrect",
[validation: :confirmation]},
pass
我有一个二进制文件,我使用模式匹配来解析第一个EJ:
<<code:: binary-size(2), _::binary-size(1), rest::binary>> = line
=行
rest变量仍然是二进制格式,我希望它是字符串格式的?这是一个表示问题。事实证明,IEx控制台无法显示带有字符的数据,并将其打印为代码点。当二进制文件包含例如\0字符时,通常会发生这种情况
看,让我们从一开始,或者从你所拥有的开始:
iex> <<57, 56,
我对长生不老药很陌生(到目前为止我很喜欢它),我一直在想如何使用一个简单的字符串,比如
"folder1/folder2/folder3/last_folder"
并将其转换为路径每个部分的导航链接列表(最后一个_文件夹除外):
[”https://wherever/folder1", "https://wherever/folder2", "https://wherever/folder3“]
必须有一种非常简单的方法来实现这一点——也许是使用递归?不需要显式递归。只需按/分割路径,然后执
标签: Elixir
phoenix-frameworkecto
在尝试运行混合异位后收到此错误。创建:
**(混合)无法创建Rumbl.Repo的数据库:错误42501(权限不足):创建数据库的权限被拒绝
有人知道我应该怎么做吗?通过将config/dev.exs中的用户名字段从postgres更改为我的用户名来解决这个问题。通过将config/dev.exs中的用户名字段从postgres更改为我的用户名来解决这个问题。您应该为创建数据库所使用的角色(config/dev.exs中的用户名字段)授予权限,所以你应该跑
sudo -u postgres ps
我有一个cronjob,每天晚上9点运行一个函数。这个函数要做的第一件事是进行一个EXTO查询。但是,查询有可能返回为空。如果发生这种情况,我希望能够处理
当前尝试:
但这不起作用,因为如果查询为nil,则会抛出以下错误:
错误:
它基本上是在下一个函数中检查nil问题,但显然它中断了,因为问题是nil
如果回购查询返回为零,我如何将其路由到案例?案例将尝试从上到下匹配。因此,在代码中,首先尝试匹配nil,然后匹配不匹配的情况。如果要匹配结果为非零时的大小写,请在非为零时使用(问题)
def c
我试图插入参数,但当像'memo'这样的参数之一为空时。
通常我如何处理nil参数?
我只想像这样零检查
memo = (memo == nil ? "" : memo)
无检入长生不老药的最佳实践是什么。
如果是这样的话,或者别的什么
在这种情况下,当_paramsmemo为nil时,它将返回错误代码
def create(conn, _params) do
price = _params["price"]
amount = _params["amount"]
memo = _p
标签: Elixir
phoenix-frameworkecto
我有两个模型:UserGroup和User,它们具有many-to-many关系
在我的用户组索引操作中,我执行如下操作:
user_groups =
UserGroup
|> Repo.all
|> Repo.preload(:users)
def render("index.json", %{user_groups: user_groups}) do
%{
user_groups:
Enum.map(user_groups, fn user_
我有一个用例,我想在我的数据库(Postgres)中存储模块名称。我这样做是为了以后可以检索名称,并调用模块中定义的函数。
e、 g
假设我有一个模式“xyz”
我想在其中保留一个字段模块名
schema "xyz" do
field(:module, Ecto.Atom)
end
现在,我将字段保持为type
正确吗?如果不正确,正确的方法是什么?您可以使用apply/3调用名为atom的模块上的函数
假设您有Enumatom存储在xyz中,id为123。您可以这样调用Enum.map(
在这篇文章之后,我创建了一个shell脚本,通过运行IEx.Helpers.h来查看Elixir文档:
elixir -e "require IEx.Helpers; IEx.Helpers.h($1)"
(其中,$1是脚本的命令行参数)。(例如,命令
elixir -e "require IEx.Helpers; IEx.Helpers.h(List)"
提供模块列表的文档)
这太好了。不再需要运行iex来查看文档。终端的默认格式非常好用。但是,如果我通过管道将输出传输到寻呼机(或者更一般
标签: Elixir
phoenix-frameworkecto
我有一个参数platform,它是可选的:
def query_clicks(freq \\ "day", platform \\ false) do
from(Click)
|> select(
[c],
[
fragment("date_trunc(?,?) as t", ^freq, c.inserted_at), count(c.link_id) ]
)
|> if platform, do: f
我正在研究一个解决方案,我想在1+0+1=2中添加一些数字,例如101结果,并将其输出为101,2
我有一个数组,所以它不能正常工作,以下是我目前的代码:
numbers=Enum.map(数组,fn i->String.to_integer(i)end)
#得到这些数字的总和
sum=Enum.map(数字,fni->Integer.digits(i)|>Enum.sum()结束)
有什么想法吗?如果您想同时获得数字和数字的总和,您应该在映射函数中返回一个元组或列表,如下所示:
sum =
标签: Elixir
phoenix-frameworkecto
我有一个使用“AS”和“SUM”的查询。我在Phoenix文档中找不到这方面的任何应用程序,因此我开始怀疑是否应该使用原始SQL查询。我是新来凤凰城的,所以也许我错过了什么
我的问题是:
SELECT SUM(`http` = 1) AS http_prox,
SUM(`socks` = 1) AS socks_prox,
SUM(`is_ssl` = 1) AS ssl_prox,
SUM(`sneakers` = 1) AS sneak_prox,
SUM(`shopify` =
我有一个银行和分行模式。因此,银行有许多分行,但当我创建银行时,它应该获取分行id及其详细信息
银行模式
defmodule Banking.Schema.Bank do
use Ecto.Schema
import Ecto.Changeset
alias Banking.Schema.Branch
schema "banks" do
field :name, :string
has_many :branches, Branch
timestamps
我们正在使用一个用Go编写的文件系统。它被端口8888上的RESTAPI用来发布文件。我们遇到的问题是HTTPoison超时
我们发布到一个文件,一次又一次,我们得到HTTPoison请求超时
一些事实:
文件在海藻上得到更新,我们可以看到修改的日期
HTTPoison请求响应总是超时
我试过用卷发棒用于((i=1;i我认为问题在于网络带宽和/或延迟。基本上,你可以用max\u connections:1000同时打开1000个连接。我很确定文件系统本身和网络不会对此感到高兴。相反,你的示例中
透析器指责代码试图与模块变量匹配:
defmodule Main do
# -> :demo
@env Application.get_env(:myproject, :env)
def run do
case @env do
:production -> 1
_ -> 2
end
end
end
我该如何避免警告,还是每次都要写下面的内容
def run do
env = Application.get_
我正在向我的方案中添加utc时区感知列。但是,在我的数据库中,列类型为timestamp(0),不带out zone
我做错了什么?
我的方案如下:
defmodule Transaction do
use Ecto.Schema
import Ecto.Changeset
schema "transaction" do
field :platform_transaction_at, :utc_datetime
end
end
我的迁移文件看起来
我正在创建一个应用程序,其中我正在创建一些管理表,以便用户可以在应用程序中管理自己的下拉列表
例如,其中一个下拉列表是应用程序请求的状态。我想扩展它,这样我就可以从一个带有两个布尔值的表中配置一个接收位置和一个接收位置
在有效部分中,我们定义了如下表格:
defmodule Id.Admin.Status do
use Ecto.Schema
import Ecto.Changeset
schema "statuses" do
field :status
标签: Elixir
phoenix-frameworkecto
我对使用这个堆栈和框架进行开发还不熟悉。我使用的是Ecto 3.4,根据我对阅读文档的理解,并查看我在web上找到的内容,这应该会在我的单元中插入所有记录。我尝试过清理、重新编译和重置数据库。这在从seeds.exs调用的模块中。我有很多需要种子数据,所以我想清理它。这让人感觉代码已经过时了,因为它插入的唯一记录不是第一条记录,现在有更多的记录需要播种
def seed do
timestamp =
NaiveDateTime.utc_now()
|>
上一页 1 2 ...
76 77 78 79 80 81 82 ...
下一页 最后一页 共 125 页