我有一个会话密钥:标识为用户可能存在也可能不存在的。我想这样,如果你去登录页面,而这个关键存在,服务器重定向到主页你
我可以使用if来解决这个问题,但如果可能的话,与在另一个function子句中使用模式相比,这似乎是个坏主意
def login(conn, %{"username" => username, "password" => password}) do
if Plug.Conn.get_session(conn, :identifiedas) do
conn
在Phoenix路由器中是否有一条可以作为通配符的路由?啊,著名的口袋妖怪路由:
get "/*path"
您将在conn.params[“path”]或作为conn.path\u info啊…花了我一段时间…”“必须全部捕获”@JoseValim对于通配符路由,路径帮助器如何工作?例如,假设您有这样一行:get/*path”、RedirectController、:handle\u redirect您将如何编写redirect\u path(MyApp.Endpoint、:handle\u
我有一个工作流程,大约每30秒醒来一次,轮询数据库以获取更新,对更新采取行动,然后返回睡眠。撇开数据库轮询不可扩展和其他类似问题不谈,使用主管、工作人员、任务等构建此工作流的最佳方式是什么
我将列出我的一些想法和我的赞成/反对意见。请帮我找出最有效的方法。(顺便说一句,我对长生不老药还是很陌生。)
1。无限循环通过函数调用
只需在其中放入一个简单的递归循环,如下所示:
def do_work() do
# Check database
# Do something with result
标签: Elixir
phoenix-frameworkcloudinary
你们中有人发现/写过一种使用cloudinary和Elixir的方法吗?我看到的所有集成都基于Cloudinary的插件。但是我还没有看到elixir和erlang的插件
有没有一种方法可以很容易地构建他们发送请求的方法?看看这个
非常简单的库,易于合并到项目中。当你想上传图像时,请调用ExCloudinary.uploadImage(image.path),其中图像是你的Phoenix的多部分。对于任何想要更新一点的人。看来最受欢迎的选择是这个
标签: Elixir
phoenix-frameworkecto
我有一个非常简单的注释模型:
schema "comments" do
field :content, :string
belongs_to :user, MyApp.User
timestamps
end
我想要创建一个新记录,并且我想要验证该用户存在的changeset。我该怎么做
我的EXTO版本是1.1.8正确的方法是让数据库处理数据完整性。在应用程序中为此编写检查很容易出现竞争情况。如果在验证和插入注释之间删除了用户,该怎么办?如果删除了带有任何现有注
到底有什么区别?为什么毒药会被破解!返回格式#2(我需要#1与exto.Changeset.change一起使用)
Json响应取自API,看起来像
ab = %{a: 1}
ac = %{"a" => 1}
毒药。解码!返回格式#2:
从广义上讲,来自应用程序外部的数据是不可信的。考虑到在长期运行的Erlang系统中,原子分配可能会导致内存耗尽,因此将原子用于外部数据会使您的应用程序面临潜在的拒绝服务(DoS)攻击
这一事实反映在许多Elixir库中,例如流行的JSON解析器。在将外部
早上好
我的Elixir项目中有一些特别昂贵的数据库设置代码,可以将所需的数据插入数据库
目前,我的测试工作正常,通过@tag:insert_my_data构造,在需要该数据的任何测试之前插入该数据。我的测试助手中有代码,可以执行以下操作:
setup tags do
if tags[:insert_my_data] do
# Run code here
end
end
问题是我不得不运行这个代码数百次,而且速度很慢
如果代码在调用任何混合测试之前自动运行一次,并且由Ecto提
标签: Elixir
phoenix-frameworkecto
不知何故,我无法在《卫报》的《凤凰城/星外》中使用此功能:
会议控制器#创建
会合
如何插入与相关用户的会议?调用build\u assoc可正确设置user\u id,但调用changeset可再次删除关联。用户能够成功地进行身份验证。这里缺少什么?请看,changeset不直接包含相关属性,而是通过changeset.data
我们将从changeset.data中提取其他字段,包括用户id
因此,一旦插入,关联将被正确设置 见此,changeset不直接包含相关属性,而是通过changes
我有以下层次结构:
BRAND (1)
+
|
v
CHANNELS (0, N)
+
|
v
POSTS (0, N)
因此,每个品牌都有多个频道,这些频道有多个帖子
问题是我想用给定的频道和品牌名称插入一个帖子
因此,我需要做的是:
创建一个Post
查找或创建频道
将Post与频道关联
查找或创建品牌
将频道与品牌
我的查找或更新功能是:
Repo.insert(
%Brand{name: "name"},
on_con
我对凤凰的这种行为感到困惑。它是一个包含两个应用程序的总括项目:lib和web。以下是umbrary mix.config:
defp deps do
[{:phoenix, "~> 1.2.1"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_html, "~> 2.6"},
{:phoenix_ecto, "~> 3.0"},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"},
我在elixir中使用了“do/end”符号,或多或少类似于命令块分隔符。(换句话说,do类似于{在类C语言中,end类似于})
这是对正在发生的事情的准确描述吗?还是更像Haskelldo符号,它为单子构造了语法糖,允许类似命令的编码?是和否。do/结束是关键字列表的语法便利
您以前可能写过if表达式。人们可能期望看到的是
if predicate do
true_branch
else
false_branch
end
这也可以使用关键字列表编写。以下是完全相同的
if predi
我有一个在Phoenix应用程序中创建的注销系统,其中注销按钮位于Phoenix模板中,如下面的三个代码片段所示。这个很好用
凤凰城模板:/web/templates/layout/app.html.eex
我找到了解决方案。我在路由中定义了一个资源,因此Phoenix希望向端点发出删除请求/api/auth:id
在web/router.ex中我更改了
resources”/auth“,AuthController,除了:[:新建,:编辑]
到
delete“auth/logout”,Aut
我尝试按照教程进行操作,但当我添加电子邮件作为凭据时,我得到了以下信息:
function Credential.changeset/2 is undefined (module Credential is not available)
该教程定义了一个名为Hello.Accounts.Credential的模块,并且为您抛出错误的代码行使用了名称Credential并表示该模块不可用。您(或本教程)很可能忘记在为您抛出此错误的模块中添加别名调用。将以下内容添加到该模块应可解决此问题:
ali
从中,我可以使用类似于$YOUR\u local\u elixir\u PATH/bin/iex-S mix的命令指向elixir的本地git克隆。但是假设我在内核模块中修改内核长度,在计算列表长度之前打印“hello”
当我启动$YOUR_LOCAL_ELIXIR_PATH/bin/iex-S mix并执行长度([1,2])时,不会打印“hello”。这是在我使用elixir自述中发布的类似于bin/elixirc-lib/elixir/lib/kernel.ex的命令在$YOUR\u LOC
我想知道是否有一种方法可以捕捉光标的绝对位置
在Elixir的命令行中
我知道我必须使用以下ansi转义序列\033[6n,
执行后:
echo -en "\033[6n"
打印出我想要的内容,但我不确定如何从Elixir获得命令响应
谢谢!如果您知道系统命令,请使用Elixir执行该命令。我最接近的方法是:
~C(bash -c "echo -en '\033[6n'") |> :os.cmd
但是,它返回的是'\e[6n'而不是光标位置。必须是:os.cmd/1函数中包含转义符号
这个长生不老药函数中第二个参数的含义是什么
Code.compile_quoted(quoted, file \\ "nofile")
我试着这样使用它
q = quote do
defmodule A do
def hello, do: IO.puts "hello from A"
end
end
Code.compile_quoted(q, "Elixir.A.beam")
但是Elixir.A.beam文件没有创建
这主要是编译器构建后台报告环境的内部功能。它与梁无关,
在Routes文档中。我读到我们可以得到这样的路径:
iex> import HelloWeb.Router.Helpers
iex> alias HelloWeb.Endpoint
iex> user_path(Endpoint, :index)
"/users"
我们有没有办法像这样从控制器user获取canuser\u路径
user_path
谢谢这不是公共API,将来可能会更改,但是MyApp.Router.\uu路由\uu\u0可用
我正在运行这样的查询:
query = from q in MY.Model, preload: [:accoc], where: q.accoc_field in [10, 11]
Repo.all(query)
这给了我一个错误:
** (Ecto.QueryError) iex:32: field `accoc_field` in `where` does not exist in schema MY.Model in query:
因此,基本上我正在尝试编写一个查询,如:
selec
在lib/mix/tasks/load_mnemonics.ex下创建自定义任务
将CSV文件大容量插入DB表时出现奇怪错误。
执行任务的命令是
混合数据\u监视器。加载\u助记符
defmodule Mix.Tasks.DataMonitor.LoadMnemonics do
use Mix.Task
alias DataMonitor.Mnemonic
alias DataMonitor.Repo
require Logger
@shortdoc "Loads mn
标签: Elixir
phoenix-frameworkecto
埃克托3.2.5,凤凰城1.4.11,长生不老药1.9.4
我有一个外部变更集,看起来像这样。我有许多字段要在所有具有相同最大长度的字段上运行validate\u length
my_model
|> validate_required(required_fields())
|> validate_length(:field, max: 255)
|> validate_length(:another_field, max: 255)
# More of the same va
在条件中分配变量的情况下:
color=“”
unit=“”
案例名称do
“苹果”->
color=“红色”
单位=“千克”
“梨”->
color=“绿色”
unit=“每个”
_ ->
color=“黑色”
unit=“每个”
结束
%{名称:名称,颜色:颜色,单位:单位}
在上面的代码中,它需要在前面声明变量。我不认为这是一个好的代码,和想法
答案可以使用if/else表示真/假,也可以使用用例表示多个条件。您可以尝试以下代码:
{color, unit} = case name do
我想在Elixir的捕获中创建一个匿名函数,如:fn\u x->“random”end,但如果我这样做:
&(“random”)然后我得到一个编译错误:
** (CompileError) invalid args for &, expected an expression in the format of &Mod.fun/arity, &local/arity or a capture containing at least one argument as &
我目前正试图在Elixir中构建一个Redis克隆。作为这项工作的一部分,我使用一个任务来处理get/set请求,并使用ETS来存储键和值
** (ArgumentError) argument error
(stdlib 3.13.2) :ets.insert(:kv, {"doomspork", "Sean", ["Elixir", "Ruby", "Java"]})
以下是我对相关
在IEx中,从查询中编码某个外部结构的简单而快速的方法是什么?我不是在寻找如何在我的应用程序代码中实现@derivate,只是一种快速转储到JSON的方法,可以快速提取一些数据。我发现以下方法对我很有效。需要删除:\uuuu meta\uuuu和任何未加载的关联
Repo.all(Event) |> Enum.map(&(Map.from_struct(&1) |> Map.drop([:__meta__]))) |> Jason.encode!()
我在Elixir中有一个函数,它可以在一个具有可选标志的状态下结束:ok,blocked,ok,blocked。(在本例中,“_sprowned”是国旗。)未来,州和国旗的数量可能会增加
我的问题是——实现这一点的最佳方式是什么?所以我可以很容易地检查标志/总体状态
我的想法是映射或一些元组,其中第一个元素是基态,第二个是标志的表示,但我不确定什么更好
非常感谢您的任何想法。我只想使用原子和元组:
可能是这样的:
{:ok, nil}
{:ok, :blocked}
{:ok, :spawn
有没有比求助于更干净的方法来转换true->1和false->0
if boolean_variable do
1
else
0
end
您可以使用以下语法来缩短它,但由于语言中没有显式的三元运算符,因此仍然需要一个if宏
如果是布尔变量,do:1,else:0
资料来源:我不知道这有内置的转换功能。您如何构建自己的解决方案取决于您想要实现的目标。考虑您的实现:
def boolean_to_integer(bool) do
if bool, do: 1, else: 0
end
我正在尝试安装elixir软件包,每当我使用mix命令时,我都会收到这样的消息
mix archive.install https://github.com/phoenixframework/phoenix/releases/download/v1.0.0/phoenix_new-1.0.0.ez
Are you sure you want to install archive https://github.com/phoenixframework/phoenix/releases/downlo
我开始学习长生不老药-凤凰,来自Rails,我很喜欢它。
我对从EXTO获取的日期有一个问题:我只需要显示自动生成的inserted_at的日期。我还尝试使用Timex和Timex_-Exto插件来实现这一点,但目前运气不佳。您可以根据以下结果进行模式匹配:
如果您想使用timex,一旦您得到erlang datetime格式的结果({{y,m,d},{h,m,s}),您可以使用我通常使用日历依赖项(添加到混合文件),然后
给定数据库中的日期,如date_from_db=“2016-01-08T
我想提供一个LibraryModule,如下所示:
defmodule ClientModule do
use LibraryModule
end
ClientModule.do_something # should work
我希望LibraryModule提供do\u something/0的默认实现,只需在ClientModule中定义即可覆盖该实现。然而,当我现在这样做时,我得到一个编译器警告:“这个子句不能匹配,因为在X行的前一个子句总是匹配的”
好像是GenServer做的,
标签: Elixir
phoenix-frameworkecto
我正试图将我的模板中的时间格式化为“12秒前”或“14分钟前”。Ecto目前发出的超时看起来像是2016-06-28 21:35:21
目前,我只是这样渲染时间:
我知道ruby/rails有一个名为time\u ago\u in\u words()的函数,它完成了我正在寻找的功能。也许这可以通过新的Elixir 1.3日历类型实现?您可以使用Timexhex软件包。具体功能。您需要确保您的日期类型为DateTime。然后简单地使用
Timex.from_now(my_date)
#"2 hou
我来自PHP Symfony2框架。假设您有型号用户和地址
schema“用户”做什么
字段:名称,:字符串
有很多:地址、应用程序地址
结束
schema“addresses”do
字段:street,:string
字段:城市,:字符串
...
属于:用户,应用程序用户
结束
我想为用户创建具有多个子表单的地址表单。我已经读过一篇文章,其中描述了如何编辑和删除集合中的项目。但是动态添加新的并没有什么关系,我的意思是为新的地址生成一个子表单。在Symfony中有一个名为的函数,它是为集合中
我想跳过Phoenix,因为我正计划为React应用程序构建一个演示,该应用程序的状态使用一些API路由。似乎是一个熟悉底层技术的机会
我提出了以下内容,但感觉非常“硬编码”,我很好奇是否有更优雅的解决方案来实现同样的目标
defmodule DemoApp.Plug.ServeStatic do
use Plug.Builder
@static_opts [at: "/", from: "priv/static"]
plug :default_index
plug Plug
论编辑
def request(method \\ :get, path) do
end
def request(method \\:get, path, params) do
end
我不明白为什么我不能有两个参数模式匹配def。当出现请求(“post”,“test”)时,会出现成像情况。post是方法名还是路径名,与test是同一个故事-是路径还是参数?
我想对您来说,最好的解决方案是简单地使用带有三个参数的request方法,并使用params作为可选参数
def re
我在玩一点,实现自定义init回调时遇到问题
请考虑以下代码:
defmodule GenS do
use GenServer
def start_link(initial \\ 0) do
GenServer.start_link(__MODULE__, initial)
end
def init(initial) do
case initial do
3 -> {:stop, "Can't initialise with 3"}
我正在为每个用户启动genserver,使用他们的ID作为名称
def start_link(id) do
GenServer.start_link(__MODULE__, id, name: via_tuple(id))
end
defp via_tuple(id) do
{:via, :gproc, {:n, :l, {:id, id}}}
end
Api看起来像:
def state(id) do
GenServer.call(via_tuple(id),
尝试通过mix phoenix.server启动时,会报告以下错误,直到服务器被终止:
** (stop) exited in: GenServer.call(Postgrex.TypeServer, {:fetch, {'localhost', 5432, "database_name", :copy, [{Ecto.Adapters.Postgres.DateTime, []}, {Postgrex.Extensions.JSON, [library: nil]}]}}, 60000
如何匹配字符串的前n个字符?比如:
def take(n) do
head :: size(n) <> rest = "my string"
end
def take(n)do
head::size(n)rest=“我的字符串”
结束
您可以使用模式匹配获得第一个n字节:
iex(1)> n = 4
4
iex(2)> <<head :: binary-size(n)>> <> rest = "my string"
"my str
标签: Elixir
phoenix-frameworkecto
我的目标是找出以分钟为单位的时差:
{_, {_, aaa, _}} = Ecto.DateTime.to_erl(d1) |> :calendar.time_difference(:calendar.universal_time)
我有一个从Postgresql检索到的时间戳:
iex(13)> d1
~N[2017-02-09 07:23:04.000000]
以前,这种方法效果很好:
d11 = Ecto.DateTime.to_erl(d1)
但现在它抛出了一个异常:
文档给出了在iex中使用的示例,它在那里工作:
虽然它在脚本内部不起作用:
$ elixir e.exs
** (CompileError) e.exs:6: undefined function flush/0
(elixir) lib/code.ex:363: Code.require_file/2
我发现这个函数是一些IEx.Helpers的一部分
但是,在脚本开头使用IEx的助手或使用IEx不会生效。您不想使用使用关键字。您需要别名或导入
它们都是相关的,但略有不同
im
标签: Elixir
phoenix-frameworkecto
我有类别和产品,它们属于这个类别。设置:
mix phoenix.new shop
cd shop
mix ecto.create
mix phoenix.gen.html Category categories name
mix phoenix.gen.html Product products name category_id:integer
mix ecto.migrate
web/router.ex
[...]
scope "/", Shop do
pipe_through :br
我需要能够计算比Float类型允许的小数位数更多的小数位数:15
iex(19)> Float.round(1/7, 15)
0.142857142857143
iex(20)> Float.round(1/7, 16)
** (FunctionClauseError) no function clause matching in Float.round/2
(elixir) lib/float.ex:163: Float.round(0.14285714285714285,
标签: Elixir
phoenix-frameworkectochangeset
我有一个后端显示了一个帖子列表的博客。每个帖子都有一个publish_on值,该值是datetime-如果当前时间晚于publish_on,则帖子处于活动状态。帖子有一个名为active的布尔虚拟字段
当我在Repo中查询帖子列表时,我想浏览一下列表,如果当前时间是在publish_on之后,则将Post's active设置为true
最灵丹妙药的方法是什么?还有,长生不老药社区的Pythonic版本是什么
models/post.ex
控制器/post_controller.ex
templ
标签: Elixir
phoenix-frameworkecto
我做了一个复杂的SQL。所以我使用原始查询。
我已经提到了https://stackoverflow.com/questions/36042888/raw-sql-with-ecto
但我还是堆积起来了
query = "select item_id, sum(unit) amount from sales where item_id = ? "
result = Ecto.Adapters.SQL.query(Repo, query, [item_id])
然而,我不知道如何检索DB值,就像
我想在模块外调用私有函数。在Ruby中,我可以通过#send方法来实现,但在我看来,Elixir的应用不适用于私有函数
apply(ExAws.S3, :url_to_sign, ["bucket", "file.jpg", ExAws.Config.new(:s3), true])
** (UndefinedFunctionError) function ExAws.S3.url_to_sign/4 is undefined or private
我知道调用私有函数/方法不是一个好方法,但无
两者略有不同,但没有讨论什么不同
文档中确实提到了第一个是“由编译器内联的”,后面一个是引发的异常
是否有一个经验法则,我应该在什么时候使用一个而不是另一个,反之亦然
关于差异是返回值:
iex(1)> map = %{foo: 42}
%{foo: 42}
iex(2)> Map.fetch(map, :foo)
{:ok, 42}
iex(3)> Map.fetch(map, :bar)
:error
iex(4)> Map.fetch!(map, :foo)
42
我需要做一个复杂的查询,以了解商店是否在一天中的某个特定时间营业。这是一个局部查询
current_time = %Time{(time_now |> DateTime.to_time()) | microsecond: {0, 0}}
current_time_string = time_now |> DateTime.to_time() |> Time.to_string()
MyApp.StoreSchedule
|> where(
[rs],
我很确定我错过了一些东西,但我正在为此烦恼。我有以下架构的设置:
schema "accounts_providers" do
field :provider, :string, null: false
field :uid, :string, null: false
field :auth_token, Persistence.Encrypted.Binary, null: false
belongs_to :user, MyApp.Accounts.User
times
标签: Elixir
phoenix-frameworkecto
我有一个计算每个链接点击次数的函数。问题在于最终的数据结构,其形式为{Link,10}。我真正想做的是把它放在总数中,这样我可以在视图中更容易地访问它,比如链接。单击\u count。可能吗?使用:
因此,在您的代码中:
{Link, 10} |> elem(1)
#⇒ 10
您的EXTO模式中是否有用于链接的虚拟字段?如果没有,您将要添加它:
query
|> Repo.all()
|> how_do_you_get_tuple()
|> elem(1)
然后,您
我正在开发Elixir,使用Erlang内置的:httpc函数执行get请求
if{:ok,{status,header,body}}=:httpc.request(:get,{img,[]},[],[],[])do
# ...
结束
这些功能运行良好。运行混血透析器后,返回错误:
:0:未知的函数
功能:httpc.request/4不存在。
___________________________________________________________________________
我有一些代码,通过在ETS中查找用户,或者创建一个结构,将该值存储在ETS中并返回新创建的用户,来计算用户
user = if user = Data.lookup(phone) do
user
else
user = %User{phone: phone}
Data.insert({phone, user})
user
end
然而,在我看来,它不是最好的代码,我也不知道如何重构它。在长生不老药中,什么是一种惯用的方法呢?我肯定会使用模式匹配:
def get_user(p
上一页 1 2 ...
8 9 10 11 12 13 14 ...
下一页 最后一页 共 125 页