标签: elixir

如何在自定义混合任务中从Ecto获取数据

我想在自定义混合任务中通过Ecto显示来自我的数据库的数据.如何在我的任务中获得Ecto仓库(或启动它)?

我试过这样的东西,但它不起作用:

defmodule Mix.Tasks.Users.List do


use Mix.Task
  use Mix.Config
  use Ecto.Repo, otp_app: :app

  @shortdoc "List active users"
  @moduledoc """
    List active users
  """
  def run(_) do
    import Ecto.Query, only: [from: 1]

    Mix.shell.info "=== Active users ==="
    query = from u in "users"
    sync = all(query)
    Enum.each(users, fn(s) -> IO.puts(u.name) end)
  end

end
Run Code Online (Sandbox Code Playgroud)

当我启动mix users.list时,这会给我以下输出:

** (ArgumentError) repo Mix.Tasks.Users.List is not started, please ensure it is part of your supervision tree
    lib/ecto/query/planner.ex:64: Ecto.Query.Planner.query_lookup/5
    lib/ecto/query/planner.ex:48: Ecto.Query.Planner.query_with_cache/6
    lib/ecto/repo/queryable.ex:119: Ecto.Repo.Queryable.execute/5
Run Code Online (Sandbox Code Playgroud)

有什么想法或其他方法来解决这个问题?

elixir-mix elixir phoenix-framework

11
推荐指数
2
解决办法
2194
查看次数

Elixir Jason 使用元组编码结构

我有一个结构,@derive Jason.Encoder但该结构中的某些字段是元组,因此无法对结构进行编码,我该如何解决:/

更新

我已经使用下面提到的方法来实现协议。关于这种方法需要注意的一件重要事情是它会改变整个项目的编码,请小心!

elixir

11
推荐指数
2
解决办法
2367
查看次数

Elixir - 嵌套JSON解析到结构

免责声明:我在这里检查过这个问题并没有回答我的问题.

我试图想出一种嵌套结构解析JSON的方法.例:

{"name": "blah blah", "address": {"street": "smthing"}}
Run Code Online (Sandbox Code Playgroud)

我想达到这个结果:

%User{name: "blah blah", address: %Address{street: "smthing"}}
Run Code Online (Sandbox Code Playgroud)

因为这样可以更容易地插入验证(使用Vex作为exapmle).

我知道Poison支持"as struct"选项,但它不提供嵌套.以上将被解析:

%User{name: "blah blah", address: %{"street" => "smthing"}}. 
Run Code Online (Sandbox Code Playgroud)

我知道我可以为模块编写解码器实现,User但我想这不是预期的用例,它不是通用的.

当想知道一个实现时,我找不到一种方法来判断一个原子是否是一个模块......也许我不得不一起去:code.is_loaded(module_name)

无论如何,在尝试实现之前,我想知道是否有一些我没有看到的东西.

json elixir

10
推荐指数
2
解决办法
4645
查看次数

如何从另一个Phoenix应用程序连接到远程/外部Phoenix应用程序频道?

我希望逐步将遗留API应用程序移植到Phoenix.理想情况下,我会将应用程序的子域划分为单独的Phoenix应用程序,并将它们托管在不同的服务器节点上.

我希望使用Phoenix频道来促进应用与应用之间的沟通.如何将一个Phoenix应用程序连接到另一个渠道和主题?例如,我想设置一个带有WebSockets的'jobs.foo.com'子域,如:

socket "/ws", Jobs do
   channel "jobs:work_orders", WorkOrdersChannel
end
Run Code Online (Sandbox Code Playgroud)

从另一个凤凰应用程序(例如:报告)我想发布/转到该职位频道主题.是否可以Phoenix.Endpoint在Reports中创建Jobs lib,并Jobs.Endpoint在config.exs中配置该url?我可以使用类似于Phoenix.PubSub.subscribe/4名为pubsub端点的东西吗?

我不确定我的想法是否合理.如果有更明智的方法,我愿意接受建议.

- 编辑 -

只是为了澄清我想要完成的事情......我想让一个Phoenix应用程序通过WebSocket客户端连接到另一个.这将允许我拥有具有不同域逻辑的应用程序,通过频道和共同感兴趣的主题进行通信.

elixir phoenix-framework

10
推荐指数
2
解决办法
4052
查看次数

使用加载应用程序启动"iex",并在1行中运行命令

我想在Node.js中像"gulp.js"那样进行自动构建.

$ iex -S mix -e'DribbbleGif.main'

**(混合)不能隐式地将标志传递给默认混合任务,请调用:mix run

我想在1行命令中执行此操作.

  1. 加载应用
  2. 开始"iex"
  3. 做功能(DribbbleGif.main)

因为,最后我想看这样的文件.

chokidar**/*.exs**/*.ex -c'iex -S mix -e'DribbbleGif.main''


如果您有其他自动构建解决方案,请告诉我.

elixir

10
推荐指数
1
解决办法
1896
查看次数

如何在没有Phoenix的情况下配置Plug.Static

我现在被困了几个小时,试图弄清楚如何在没有任何其他框架的情况下配置Plug.Static (Phoenix,Sugar,...); 只是牛仔,插头和Elixir.我只是不知道如何把东西放在路由器里.

  plug :match
  plug Plug.Static, at: "/pub", from: :cerber
  plug :dispatch

  get "/" do
    Logger.info "GET /"
    send_resp(conn, 200, "Hello world\n")
  end
Run Code Online (Sandbox Code Playgroud)
  1. 申报是Plug.Static在正确的地方吗?不应该之后plug :dispatch吗?
  2. 我是否需要定义其他路线
  3. 有这个声明:
    1. 要达到的URL是什么index.html
    2. 文件系统index.html应该位于何处

我迷失了......

感谢您的反馈

elixir cowboy phoenix-framework

10
推荐指数
1
解决办法
2811
查看次数

如何在Elixir中获取当前的操作系统名称?

在Ruby中,我会使用RUBY_PLATFORM常量来确定我的程序运行的操作系统(Mac,Windows,Linux等).Elixir有办法获取这些信息吗?

我目前正在尝试重新创建我在Elixir中编写的Ruby程序,并且我有一个方法可以进行依赖于操作系统的系统调用以打开文档.该方法看起来像:

def self.open_document(filename)
  case RUBY_PLATFORM
  when %r(darwin)
    system('open', filename)
  when %r(linux)
    system('xdg-open', filename)
  when %r(windows)
    system('cmd', '/c', "\"start #{filename}\"")
  else
    puts "Don't know how to open file"
  end
end
Run Code Online (Sandbox Code Playgroud)

我知道我可以运行Ruby的Kernel.system使用药剂的命令System.cmd/3,但我不知道如何获得RUBY_PLATFORM同等价值,使交换机上的case声明,还是我居然能获得这些信息.这可能吗?

更新

根据Lol4t0回答并进一步参考:

iex> :os.type
{:unix, :darwin}
iex> System.cmd("uname", ["-s"])
{"Darwin\n", 0}
Run Code Online (Sandbox Code Playgroud)

elixir

10
推荐指数
1
解决办法
1446
查看次数

Erlang vs Elixir Macros

我遇到了一些Erlang代码,我试图将其转换为Elixir,以帮助我学习这两种语言并理解其中的差异.宏观和元编程一般是我仍然试图解决的话题,所以希望你能理解我的困惑.

Erlang代码

-define(p2(MAT, REP), 
        p2(W = MAT ++ STM) -> m_rep(0, W, STM, REP))

% where m_rep is a function already defined.
Run Code Online (Sandbox Code Playgroud)

对我来说,似乎在上面的代码中,有两个单独的p2宏定义映射到一个名为的私有函数m_rep.但是在Elixir中,似乎只能有一个模式匹配定义.Elixir也有可能有不同的吗?

erlang elixir

10
推荐指数
1
解决办法
1114
查看次数

如何为凤凰框架项目加载环境变量

我创建了一个Phoenix应用程序,然后添加了用于发送电子邮件的Bamboo模块,我今天下午使用Elixir成功发送了我的第一封电子邮件,但我不得不将用户名密码硬编码到config.exs.

我读了这篇文章并在我的凤凰项目的根目录中设置了一个.env文件,我试图在config.exs文件中使用以下语句加载环境变量.

username: System.get_env("SMTP_USERNAME"),
password: System.get_env("SMTP_PASSWORD"),
Run Code Online (Sandbox Code Playgroud)

但是,电子邮件没有发送,竹子给了我一个相当神秘的错误信息.

我正在使用终端中的以下命令构建phoenix应用程序,

iex -S mix
Run Code Online (Sandbox Code Playgroud)

我在ifx会话中手动发送电子邮件,其命令类似于下面的命令,

CrjApi.Email.hello_text_email("me@example.com") |> CrjApi.Mailer.deliver_now
Run Code Online (Sandbox Code Playgroud)

但只有在用户名/密码被硬编码到config.exs文件中时才会发送电子邮件.我如何使用.env我设置的文件,所以我不必硬编码用户名/密码config.exs

注意:我正在运行OS X,并使用鱼壳.

elixir phoenix-framework

10
推荐指数
3
解决办法
5085
查看次数

如何在Elixir中格式化数字?

Elixir中最直接,最有效的方法是什么?

Starting number: 123.101

Ending number: 123.101000 # Adding 3 digits to the precision of a float.

Starting number: 123

Ending number: 123.000 # Adding 3 digits to the precision of an integer.

Starting number: 123.101

Ending number: 123.1 # removing precision

Starting number: 123.000

Ending number: 123 # removing precision
Run Code Online (Sandbox Code Playgroud)

elixir

10
推荐指数
4
解决办法
6384
查看次数

标签 统计

elixir ×10

phoenix-framework ×4

cowboy ×1

elixir-mix ×1

erlang ×1

json ×1