标签: elixir

Elixir - 'use'关键字有什么作用?

我怀疑这是一个基本问题,但很难在网上找到一个简洁,规范的答案.

从我理解的一点点来看;

  • 它与'require'和'import'都不同
  • 它用于导入模块的内容.
  • 这是一个宏

任何人都可以澄清吗?

macros erlang functional-programming module elixir

12
推荐指数
1
解决办法
2520
查看次数

Elixir的模块是原子吗?

我正在努力了解Elixir中的模块.因为在Erlang中他们只是原子,但在Elixir中,原子始于:人物.所以我在iex中检查了这些表达式:

iex(16)> is_atom(List) 
true
iex(17)> is_atom(:List)
true
iex(18)> List == :List
false
iex(19)> a = List
List
iex(20)> b = :List
:List
Run Code Online (Sandbox Code Playgroud)

所以,很明显,这两个List:List的原子.但是,它如何在Erlang互操作层上运行?因为Erlang ok等于Elixir的:ok.
那么这两个(List:List)中的哪一个'List'在Erlang中是相同的?

erlang elixir

12
推荐指数
1
解决办法
1886
查看次数

如何查看HTTPoison的原始请求

我正在尝试使用HTTPoison提交此表单

https://gist.github.com/shankardevy/6728d63eb528b3cb223a

使用以下代码:

HTTPoison.post!(url,{:multipart, [{"username", "user"}, {"password", "pass"}]})
Run Code Online (Sandbox Code Playgroud)

但是,生成的页面会显示"无效身份验证".但是当我尝试使用浏览器使用相同的凭据登录时,它可以工作.

所以我想知道我是否能看到HTTPoison的原始http请求,以便我可以将它与来自浏览器的原始请求进行比较.

elixir

12
推荐指数
1
解决办法
2996
查看次数

管理多对多关联

说,我有Post模型属于很多标签:

defmodule MyApp.Post do
  use MyApp.Web, :model

  schema "tours" do
    field :title, :string
    field :description, :string
    has_many :tags, {"tags_posts", MyApp.Tag}
  end

  # …
end
Run Code Online (Sandbox Code Playgroud)

保存帖子时,我从多选字段中获取tags_ids列表,如下所示:

tags_ids[]=1&tags_ids[]=2
Run Code Online (Sandbox Code Playgroud)

问题是如何在凤凰城保存时将标签链接到帖子?

elixir phoenix-framework

12
推荐指数
2
解决办法
2591
查看次数

何时在Elixir中内联函数

所以问题很简单,内联究竟做了什么以及何时应该在Elixir中使用?

通过内联我的意思是: @compile {:inline, myfun: 1}

PS我知道,有一个在二郎文档中的主体的信息在这里,但我仍然不知道我的理解.

elixir

12
推荐指数
1
解决办法
1993
查看次数

如何在我的模型文件中使用Repo模块

在我的Tag模型代码中

schema "tags" do
  field :name, :string
  field :parent, :integer # parent tag id
  timestamps
end

def add_error_when_not_exists_tag_id(changeset, params) do
  tags = Repo.all(Tag)
  is_exists_tag_id = Enum.reduce(tags, fn(x, acc) -> acc || (x.id === params.parent) end)
  if is_exists_tag_id, do: changeset, else: add_error(changeset, :parent, "not exists parent!")
end
Run Code Online (Sandbox Code Playgroud)

上面的代码导致下面的错误.

(UndefinedFunctionError) undefined function: Repo.all/1 (module Repo is not available)
Run Code Online (Sandbox Code Playgroud)

我可以修复错误吗?

Tag模型是嵌套标签模型.

标签可以有父标签.


最终代码如下.这很好.

在模型中

def add_error_when_not_exists_tag_id(changeset, params, tags) do
  is_exists_tag_id = Enum.reduce(tags, false, fn(x, acc) -> acc || (Integer.to_string(x.id) …
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

12
推荐指数
1
解决办法
4857
查看次数

UndefinedFunctionError phoenix elixir新项目

随着凤凰城的全新安装,我试图触发一个新项目,当我尝试运行服务器时,我遇到了:

Unchecked dependencies for environment dev:
 * gettext (Hex package)
  the dependency is not available, run "mix deps.get"
 * phoenix_live_reload (Hex package)
  the dependency is not available, run "mix deps.get"
 * cowboy (Hex package)
 * List item
...
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时,mix deps.get我得到:

Running dependency resolution
** (UndefinedFunctionError) undefined function Access.Map.get_and_update!/3 (module Access.Map is not available)
    Access.Map.get_and_update!(%Mix.Dep{app: :cowboy, deps: [], extra: [], from: "/Users/victoriawagman/Dropbox/Hemsidor/digitalocean/hello_phoenix/mix.exs", manager: nil, opts: [hex: :cowboy, build: "/Users/victoriawagman/Dropbox/Hemsidor/digitalocean/hello_phoenix/_build/dev/lib/cowboy", dest: "/Users/victoriawagman/Dropbox/Hemsidor/digitalocean/hello_phoenix/deps/cowboy"], requirement: "~> 1.0", scm: Hex.SCM, status: {:unavailable, "/Users/victoriawagman/Dropbox/Hemsidor/digitalocean/hello_phoenix/deps/cowboy"}, …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

12
推荐指数
1
解决办法
1507
查看次数

有没有简单的方法来查看Elixir宏扩展到什么?

Elixir在过去的18个月左右一直是我的goto语言,但是我有时会发现"没有魔法"的口头禅(特别是引用凤凰与Rails的引用)和宏的使用之间存在紧张关系.

虽然当我使用没有它们的语言时我现在想念宏,但我仍然希望看到它们实际上在做什么更容易.我的某些部分总是希望拉回DSL幕布并查看真实的代码.

有没有一种简单的方法来扩展宏并查看它们生成的代码(可能通过IEx),这样我就不必深入研究defmacro层,试图将它拼凑在一起.

macros elixir

12
推荐指数
2
解决办法
1773
查看次数

如何处理poolboy中的超时?

我有一个长时间消耗迁移的问题,我希望在并行运行(它可以在并行运行).实际上,迁移是关于获取数据库中的所有记录,并对每个记录执行耗费时间和资源的操作.

有时单个记录迁移挂出,所以我给10分钟完成.如果迁移没有完成,我希望它正常关闭,没有任何例外(见下文)

我也使用poolboy erlang包来并行化实现,因为迁移不仅消耗时间,而且消耗资源.问题是我不知道如何在发生超时并且代码将要中断时处理错误.我的监督树是:

defmodule MyReelty.Repo.Migrations.MoveVideosFromVimeoToB2 do
  use Ecto.Migration

  alias MyReelty.Repo
  alias MyReelty.Repo.Migrations.MoveVideosFromVimeoToB2.Migrator

  # parallel nature of migration force us to disable transaction
  @disable_ddl_transaction true

  @migrator_waiting_time 10 * 60 * 1000 # timeout
  @poolboy_waiting_time @migrator_waiting_time + 10 * 1000 # give a time for graceful shutdown

  @pool_name :migrator
  @pool_size 3
  @pool_config [
    { :name, { :local, @pool_name }},
    { :worker_module, Migrator },
    { :size, @pool_size },
    { :max_overflow, 0 },
    { :strategy, :fifo }
  ]

  def up do
    children …
Run Code Online (Sandbox Code Playgroud)

erlang elixir gen-server actor

12
推荐指数
1
解决办法
1443
查看次数

我应该在哪里将用户上传的文件和图像存储在Phoenix/Elixir中?

我的应用程序的用户应该能够上传图像等文件.在哪个文件夹中,我应该保存这些文件?我对部署Elixir/Phoenix应用程序并不熟悉,但我不希望将这些文件包含在我部署应用程序时生成的输出打包文件中.换句话说,我不想以某种方式将上传的图像和文件静态嵌入到我的应用程序中.那么我应该在哪里存储它们?

elixir phoenix-framework

12
推荐指数
2
解决办法
2237
查看次数