标签: elixir

Elixir是否具有类似于Clojure的持久数据结构?

Elixir中的所有不可变数据结构都是持久的吗?如果不是,哪一个是哪个,哪个不是?另外,它们如何与Clojure中的持久数据结构进行比较?

clojure elixir

18
推荐指数
1
解决办法
1825
查看次数

多态关联如何与Ecto一起使用?

当我阅读https://github.com/elixir-lang/ecto/issues/389及其相关问题时,Ecto似乎支持多态关联.

假设我需要在任务和事件模型上建立注释模型关联.如果我对Ecto与自定义源的关联是正确的,那么我们需要四个表和三个模型,

  • 任务
  • 事件
  • tasks_comments
  • events_comments

模型

  • 任务
  • 事件
  • 评论

任务和事件模型将具有与自定义源的has_many关联,如下所示.

defmodule ExampleApp.Task do
  use ExampleApp.Web, :model

  schema "tasks" do
    field :title, :string
    field :body, :string
    has_many :comments, {"tasks_comments", Comment}

    timestamps
  end
end

defmodule ExampleApp.Event do
  use ExampleApp.Web, :model

  schema "events" do
    field :title, :string
    field :body, :string
    has_many :comments, {"events_comments", Comment}

    timestamps
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我不明白的是评论模型应该如何?

Comment模型如何处理两个表?以及它如何处理不同模型的belongs_to关联?

elixir phoenix-framework

18
推荐指数
1
解决办法
3628
查看次数

如何从凤凰城的环境文件中获取变量值?

我正在部署我的第一个Phoenix应用程序,并且我在环境文件(dev.exsprod.exs)中指定了变量的值.

现在我想弄清楚如何在我的控制器中访问它们.

# config/dev.exs
config :my_app, MyApp.Endpoint,
  http: [port: 4000],
  debug_errors: true,
  cache_static_lookup: false,
  my_var: "DEVELOPMENT VALUE"

# config/prod.exs
config :my_app, MyApp.Endpoint,
  http: [port: {:system, "PORT"}],
  url: [host: "example.com"],
  my_var: "PRODUCTION VALUE"
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

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

如何在Phoenix框架中有选择地禁用CSRF检查

我正在尝试创建指向我网站的Facebook页面标签.Facebook将HTTP POST请求发送到我网站的网址.这里的问题是服务器有一个内置的CSRF检查,它返回以下错误:

(Plug.CSRFProtection.InvalidCSRFTokenError) invalid CSRF (Cross Site  Forgery Protection) token, make sure all requests include a '_csrf_token' param or an 'x-csrf-token' header`
Run Code Online (Sandbox Code Playgroud)

服务器需要Facebook不能拥有的CSRF令牌.所以,我想有选择地为路径www.mywebsite.com/facebook禁用CSRF.

我怎么能在Phoenix Framework中做到这一点?

csrf elixir csrf-protection phoenix-framework

18
推荐指数
1
解决办法
3275
查看次数

在Erlang shell中禁用跳转游标

()在IEx 1.2.4中键入时,光标将"跳转"到匹配的括号1s并向后移动.即使它不是真的跳跃但它有点令人讨厌.有没有办法在IEx中禁用此功能?

编辑:

虽然最初涉及IEx的问题,实际问题(正如@tkowal在下面的评论中所指出的)实际上是在IEx运行的Erlang Shell中.因此我在这个问题上添加了erlang-shell标签.

elixir erlang-shell iex

18
推荐指数
1
解决办法
345
查看次数

Elixir:如何在案例条件下测试多个值?

是否有更短的方式来写这个:

case testvalue do
  200 ->
    true
  404 ->
    true
  _ ->
    false
end
Run Code Online (Sandbox Code Playgroud)

对于200或404,它返回true,对于其他一切,它返回false.用OR条件写它会很好但这会导致错误:

case testvalue do
  200 || 400 ->
    true
  _ ->
    false
end
Run Code Online (Sandbox Code Playgroud)

elixir

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

Docker错误:standard_init_linux.go:185:exec用户进程导致"没有这样的文件或目录"

我正在尝试使用postgresql数据库设置我的elixir-phoenix应用程序以使用Docker运行.这就是我的Dockerfile的样子:

# ./Dockerfile

# Starting from the official Elixir 1.5.2 image:
# https://hub.docker.com/_/elixir/
FROM elixir:1.5.2

ENV DEBIAN_FRONTEND=noninteractive

# Install hex
RUN mix local.hex

# Install rebar
RUN mix local.rebar

# Install the Phoenix framework itself
RUN mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez

# Install NodeJS 6.x and the NPM
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y -q nodejs

# Set /lib as workdir
WORKDIR /lib
Run Code Online (Sandbox Code Playgroud)

这是我的docker-compose.yml文件:

web:
  build: .
  dockerfile: Dockerfile 
  env_file: .env 
  command: mix phx.server # Start the …
Run Code Online (Sandbox Code Playgroud)

postgresql elixir docker phoenix-framework docker-compose

18
推荐指数
1
解决办法
6964
查看次数

Elixir:模式匹配或保护

我很好奇我在定义函数时应该使用模式匹配vs guard子句.

例如,使用模式匹配:

defmodule Exponent do
  def power(value, 0), do: 1
  def power(value, n), do: value*power(value, n-1)
end
Run Code Online (Sandbox Code Playgroud)

vs护卫条款:

defmodule Exponent do
  def power(value, n) when n==0, do: 1
  def power(value, n), do: value*power(value, n-1)
end
Run Code Online (Sandbox Code Playgroud)

我的意思是两者产生相同的结果,但是一种优先于另一种的解决方案?如果是这样,为什么?

我是Elixir的新手,所以这个问题的答案对我来说还不是很明显.提前致谢.

elixir

17
推荐指数
1
解决办法
3410
查看次数

Elixir从列表中删除nil

我得到以下结构:

[nil,
 %{attributes: %{updated_at: ~N[2017-09-21 08:34:11.899360]},
 ...]
Run Code Online (Sandbox Code Playgroud)

我想删除nils.我怎么做?尝试Enum.reduce/3但是没有用.

list elixir

17
推荐指数
1
解决办法
8683
查看次数

如何处理Phoenix中的模式多态?

在Phoenix中处理多态关联的推荐方法似乎是添加一个包含对其他模式的引用的中间模式:

所以,如果我想用不同种类的动物创建模式,我会这样做:

defmodule Animal do
  use Ecto.Model

  schema "animals" do
    belongs_to(:dog, Dog)
    belongs_to(:cat, Cat)
    belongs_to(:owner, PetOwner)
  end
end

defmodule Dog do
  use Ecto.Model

  schema "dogs" do
  end
end

defmodule Cat do
  use Ecto.Model

  schema "cats" do
  end
end

defmodule PetOwner do
  use Ecto.Model

  schema "pet_owners" do
    has_one(:pet, Animal)
  end
end
Run Code Online (Sandbox Code Playgroud)

但我也可以使用PetOwner包含二进制字段和类型的模式:

defmodule Dog do
  use Ecto.Model

  schema "dogs" do
  end
end

defmodule Cat do
  use Ecto.Model

  schema "cats" do
  end
end

defmodule PetOwner do
  use …
Run Code Online (Sandbox Code Playgroud)

elixir polymorphic-associations ecto phoenix-framework

17
推荐指数
1
解决办法
1026
查看次数