标签: elixir

如何保存/记录iex shell的输出以获取持久的命令历史记录?

我刚刚开始使用Elixir并且已经使用了很多iexshell.我可以将"会话"保存/记录到文件中吗?

谢谢.

shell elixir

21
推荐指数
2
解决办法
2537
查看次数

在长生不老药中,"|>"是什么意思?

我正在阅读github上的一些代码elixir代码,我看到|>经常使用.它不会出现在文档站点的操作列表中.这是什么意思?

expires_at:    std["expires_in"] |> expires_at,
Run Code Online (Sandbox Code Playgroud)

elixir

21
推荐指数
2
解决办法
5917
查看次数

设置Phoenix Framework和Ecto以使用UUID:如何插入生成的值?

几天前,我开始使用Elixir和Phoenix Framework(v 0.12.0)和Postgres数据库.我正在尝试创建一个具有UUID主键的表,我更喜欢顺序默认值.

在使用mix phoenix.gen.html生成模型和迁移文件并遵循Phoenix文档中的其他步骤之后,我已经更改了

def model do
    quote do
      use Ecto.Model
    end
  end
Run Code Online (Sandbox Code Playgroud)

web.ex

def model do
  quote do
    use Ecto.Model
    @primary_key {:id, :uuid, []}
    @foreign_key_type :uuid
  end
end
Run Code Online (Sandbox Code Playgroud)

正如Ecto文档中提到的那样.我也将迁移更改为

create table(:tblname, primary_key: false) do
  add :id, :uuid, primary_key: true
  [other columns]
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试从自动生成的表单向表中添加一个条目时,我收到一个错误,因为它id是null.如果我手动将id-column 添加到模型中,则会收到列已存在的错误.如果我忽略设置primary_key为false table/2并删除id列,则使用顺序id列生成表.

我是否需要id在变更集中手动设置,或者在设置我的应用程序以使用UUID时出错?提前致谢

postgresql elixir ecto phoenix-framework

21
推荐指数
2
解决办法
6834
查看次数

Elixir - 从URL下载文件(图像)

从URL下载文件/图像的代码在Elixir中是什么样的?

谷歌搜索似乎带回了如何下载Elixir本身.

elixir

21
推荐指数
3
解决办法
6968
查看次数

Elixir - 尝试/捕捉vs尝试/救援?

背景

双方try/rescuetry/catch在花好月圆错误处置技术.根据引言指南中的相应章节.

可以使用try/rescue构造来挽救错误

另一方面,

throwcatch被保留用于它在哪里不可能的,除非通过使用检索的值的情况throwcatch.

疑惑

rescue对错误有一个简短的了解.虽然catch是任何价值.

然而,

  • 我什么时候应该使用Elixir中的错误处理机制?
  • 它们之间有什么区别?
  • 我应该如何选择一个用于特定用例?
  • 究竟是什么'除非使用throwcatch' ?, 否则无法检索值的情况

elixir

21
推荐指数
2
解决办法
6726
查看次数

Phoenix - 无效的CSRF(跨站点伪造保护)令牌错误

尝试更新(或创建)记录时,我收到无效的CSRF令牌错误.我正在使用Elixir v1.0.3,Erlang/OTP 17 [erts-6.3]和Phoenix v0.8.0(我想,我不知道如何查看Phoenix的版本).我正在创建一个Web应用程序,主要遵循Phoenix指南和Elixir Dose Jobsite示例资源.但是,当我尝试从html表单发布信息时,我收到无效的CSRF令牌错误.根据错误中给出的建议,我将'x-csrf-token':csrf_token添加到操作中.

edit.html.eex:

<h2>Edit Directory</h2>
<form class="form-horizontal" action="<%= directory_path @conn, :update, @directory.id, 'x-csrf-token': @csrf_token %>" method="post">
  <div class="form-group">
    <label for="directory" class="col-sm-2 control-label">Directory</label>
    <div class="col-sm-10">
      <input type="hidden" name="_method" value="PATCH">
      <input type="text" class="form-control" value="<%= @directory.directory %>" name="directory" placeholder="Directory" required="required">
    </div>
  </div>
...
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

[error] #PID<0.579.0> running Ainur.Endpoint terminated
Server: localhost:4000 (http)
Request: POST /config/directories/2?x-csrf-token=
** (exit) an exception was raised:
    ** (Plug.CSRFProtection.InvalidCSRFTokenError) Invalid CSRF (Cross Site Forgery Protection) token. Make sure that all your non-HEAD and non-GET …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

20
推荐指数
3
解决办法
9352
查看次数

我可以在哪里放置插头,然后在我的Phoenix应用程序中使用不同控制器中的插件?

我创建了我的第一个Elixir- Phoenix应用程序.我已经写了一些我想在多个控制器中使用的插件,现在有很多代码重复,因为插件代码在我的所有控制器中重复.

我的问题是,是否有一个文件,我可以把所有的插头,然后访问并使用不同的控制器

# somefile to define my plugs

defp load_subject(conn, _) do
    subject = Subject |> Repo.get conn.params["subject_id"]

    assign(conn, :subject, subject)
end

defp load_topic(conn, _) do
    topic = Topic |> Repo.get conn.params["topic_id"]

    conn |> assign :topic, topic
end
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中使用它们:

# First Controller
defmodule MyApp.FirstController do
    use MyApp.Web, :controller

    plug :load_subject
    plug :load_topic
    plug :action

    def some_action(conn, _) do
        # do something
    end

    def another_action(conn, _) do
        # do some other thing
    end
end …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

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

凤凰:渲染其他文件夹的模板

我的web/templates文件夹中有两个模板文件夹:

> ls web/templates
personal_info       user
Run Code Online (Sandbox Code Playgroud)

我想要的是user在另一个视图中从文件夹渲染一些模板personal_info.所以我在路径上有一个文件:web/templates/personal_info/index.html.eex,我有以下内容:

<%= render "user/xyz.html" %>
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误:

[error] #PID<0.821.0> running MyApp.Endpoint terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
    ** (Phoenix.Template.UndefinedError) Could not render "user/xyz.html" for MyApp.PersonalInfoView, please define a matching clause for render/1 or define a template at "web/templates/personal_info". The following templates were compiled:

* index.html
Run Code Online (Sandbox Code Playgroud)

请告诉我如何渲染在其他文件夹中定义的模板,我尝试了几个排列,但没有一个工作.

templates elixir web-deployment phoenix-framework

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

循环遍历Map的键值对

如何在Elixir中迭代地图的键值对?

这不起作用:

my_map = %{a: 1, b: 2, c: 3}

Enum.each my_map, fn %{k => v} ->
    IO.puts "#{k} --> #{v}"
end
Run Code Online (Sandbox Code Playgroud)

elixir

20
推荐指数
1
解决办法
2万
查看次数

什么是灵丹妙药中的=〜运算符

文档中我了解=~运算符如何匹配正则表达式,但我不明白这个运算符的一般用法.

例如,什么"foo" =~ "foo"意思?它有什么不同"foo" == "foo"

elixir

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