我正在尝试使用Elixir中的GoogleMaps地理编码API,虽然我对该语言有点陌生,但使用嵌套数据结构却让我难以理解
我使用HTTPotion从地理编码端点获取JSON,并使用JSEX将其解析为Elixir数据结构(一系列嵌套列表和元组)
defmodule Geocode do
def fetch do
HTTPotion.start
result = HTTPotion.get "http://maps.googleapis.com/maps/api/geocode
以下代码用于读取文件并为每行创建项记录:
defmodule Ship do
defrecord Item, product_code: 0, quantity: 0, destination: ""
def load_data do
File.read!("data")
|> String.split
|> Enum.map &(String.split &1, ",")
|> Enum.map &am
长生不老药新手。我一直在尝试将关键字列表转换为字符串。我可以这样做
IO.inspect([name: "John Doe"])
但它会将字符串打印到控制台。是否有只返回字符串的函数
inspect([name: "John Doe"])
它是由内核模块定义的,因此会自动导入。请注意,iim,IO.inspect默认情况下会打印。默认情况下,Kernel.inspect不会。因此,要在终端上获得相当于IO.inspect,您需要IO.puts(inspect(,pretty:true))。另
在phoenix/elixir项目中:什么是放置辅助函数的好地方。例如:我使用来处理日期,但我必须对返回的结构进行一些转换,以便将其与我的DB驱动程序一起使用(一个使用键:min,另一个使用键:min,等等)。我不想在每个模型中重复这段代码,我将编写一个简单的函数来实现这一点。放这个的好地方是什么?是否仅在/lib文件夹中的模块中?关于如何组织这项工作,有什么指导方针吗?我认为还没有指导方针。您可以创建按主题分组的模块,如MyApp.TimexHelpers,然后在实际需要使用帮助程序的位置导入
从另一个节点访问节点状态的最佳方式是什么?
我有一个用Phoenix框架(elixir Phoenix)开发的应用程序。我想在多个节点上运行这个应用程序来管理流量。我正在利用phoenix提供的套接字的功能,因此该应用程序创建了许多套接字
我们的应用程序需要存储用户的状态信息。在他的帮助下,我创建了一个监视程序,在监视程序的状态下维护状态信息。我必须通过访问状态信息来检查用户是否在线
当我进行多节点设置时,用户可能连接到任何节点。在这种情况下,要检查用户的在线状态,我需要从所有节点访问状态信息。
标签: Elixir
phoenix-frameworkotpelixir-mix
我有一个OTP申请(实际上是ChicagBoss)。我正在尝试将Phoenix应用程序合并到它中(只是作为休闲OTP应用程序)
我认为大多数应用程序都会启动,但我得到了由于缺少配置文件而导致的错误。如何从外部为混合应用程序提供配置文件?特别是当我试着从rebar运行它时。如何提供目录?当使用Erlang project时,您不应该使用mix configs,而应该使用Erlang configs。在您的特定示例中,boss.config文件。在boss.config中,您有一个元组列表:
[{a
如何使用插件在phoenix上执行特定操作。如果想在特定操作中使用插件,或者相反,不想在特定操作中使用插件如文档中所述,我们可以使用保护子句
plug/2支持保护,允许开发人员将插件配置为仅在某些特定操作中运行
第一个插件仅在显示或编辑操作时运行。除索引操作外,第二个插件将始终运行
我在搜索了一下后发现了这个。这让我找到了医生。希望它能帮助别人
plug :log_message, "before show and edit" when action in [:show, :
我可以做一个GET请求,但我似乎无法让POST请求工作
这是我的路线
article_path GET /api/articles Lxphnx.ArticleController :index
article_path GET /api/articles/:id Lxphnx.ArticleController :show
article_path POST /api/articles Lxphnx.ArticleController :cre
标签: Elixir
otperlang-supervisorgen-server
我正在尝试启动一个主管和一个GenServer:
defmodule SubscriptionManagerSupervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, [], [{:name, __MODULE__}])
end
# supervisor callback
def init([]) do
interval = 1000
childr
给定一个函数:
def foo(a, opts \\ []), do: opts
我可以这样调用此函数:
foo 1, b: 2
我知道b:2与[b:2]相同,
但我不能在iex中这样做,例如:
iex(1) a: 2, b: 2
** (SyntaxError) iex:1: syntax error before: a
所以我想知道,为什么函数参数中的关键字列表是
不同的?TL;DR这是语法分析器的要求,函数调用中有一个语法糖,可以省略括号关键字s本身是相同的
关键字列表本身是相同的
如果我创建一个文件loop.exs:
Enum.each(1..40000, fn (n) -> spawn fn -> IO.puts(n) end end)
然后运行它,计算输出行数:
elixir loop.exs | wc -l
在随后的运行中,我可能会看到预期的40000行,但我可能会看到更少的行。在我的测试中,我看到了39752,39934,39673,等等。这对我来说意味着某些进程无法调用IO.puts,所以它们发生了什么,为什么我没有警告它们丢失了,我做错了什么导
如何测试以下代码
["one", "two", "three"]) |> Enum.each(&IO.puts(&1))
one
two
three
:ok
我的测试目前看起来是这样的,但是失败了,因为IO.put返回的是:ok,而不是字符串,并且可能不包括完整字符串中的换行符
assert ["one", "two", "three"]) |> Enum.each(&IO.puts(&1)) == """
one
two
three
"""
对于
我在这些模块中尝试定义一个结构:
defmodule A do
defmodule B do
defstruct :id, :name
end
end
为什么会出错
undefined function defstruct/2
为什么会出现此错误?Elixir将defstruct:id,:name解释为使用两个参数调用defstruct,这是未定义函数defstruct/2中的/2部分
您要做的是将单个参数传递给defstruct,即字段名列表:
defmodule A do
我有这条路线:
resources "/my_items", ItemController, only: [:index, :show]
get "/pages/:page_number", ItemController, :page, param: "page_number"
我在ItemController中为页面设置了操作,这是一个简化版本:
def index(conn, p) do
# .....
def page(conn, %{"page_number"
我在谷歌上搜索过,但什么也没找到。如果当前请求是ajax请求并且是POST请求,如何在控制器中签入操作?对于ajax,可以检查x-request-with头的值是否为XMLHttpRequest
if "XMLHttpRequest" in get_req_header(conn, "x-requested-with") do
...
end
Plug.CSRFProtection
对于HTTP方法,您可以使用conn.method:
if conn.method == "POST" do
我在我的主模块中定义了一个常量:
@end_digits_adjusters [11, 12, 14, 21, 22, 23]
下面是我如何测试它的:
defmodule PriceOptimizerTest do
use ExUnit.Case
doctest PriceOptimizer
test "get_random_adjuster() randomizer" do
adj_num = PriceOptimizer.get_random_adjuster()
标签: Elixir
phoenix-frameworkfriendly-url
我正试图根据以下指南在我的应用程序中实现友好的URL。
正在db中根据帖子标题ok创建slug,但我无法在slug查找时显示帖子,并出现以下错误:
function Driverless.Articles.get_by/2是未定义的或私有的
post_controller.ex
...
def show(conn, %{"id" => id}) do
post = Articles.get_by!(Post, slug: id)
render(conn, "show.h
我有这个功能:
def update(%Evento{} = evento, attrs, dataSchema) do
evento
|> dataSchema.changeset(attrs)
|> Repo.update()
end
它与%Evento{}结构绑定。
我想让它独立于结构,而是传递一个参数,这样在调用函数时,我可以传递%Evento{},%News{},%Contact{}或任何我想要的结构,同时保持相同的功能/模式匹配检查。您可以使用模
在Phoenix框架中,如何获取当前环境的名称
我已经尝试使用系统读取env变量。获取_env(“MIX_env”),但该值并不总是设置的。您可以使用:
Mix.env()不适用于生产环境或其他使用已编译版本(使用Exrm/Distillery构建)的环境,或者当Mix不可用时
解决方案是在config/config.exs文件中指定它:
config:your_应用程序,env:Mix.env()
然后,您可以在应用程序中获得环境atom,如下所示:
Application.get_env
标签: Elixir
phoenix-frameworkecto
我正在努力建立一对多的关系。用户可以创建任意数量的帖子。凤凰城1.3,星外2.2.1
#migrations
defmodule MyApp.Repo.Migrations.CreateUsersPosts do
use Ecto.Migration
def change do
create table(:users) do
add :email, :string, null: false
add :handle, :string, null: fals
我有一条管道,看起来像
digits
|> Task.async_stream(__MODULE__, :filter, [s, values], timeout: :infinity)
|> Stream.drop_while(fn {_, k} -> k == :contradiction or k == [] end)
|> Stream.take(1)
这里是否定义了任何顺序?或者只是返回不满足while条件的第一个过滤器的结果将被返回?Task.async\u
早上好
从Phoenix和Elixir开始,我们在Phoenix V1.3.2中使用Ecto时遇到了在线教程的问题
我们已使用以下内容设置应用程序
mix phx.newAPI--没有早午餐--没有html--数据库=mysql
在本教程之后,我们开始使用EXTO,但是我们已经了解到有一些突破性的变化,但无法找出下面错误的原因
**(退出)引发了一个异常:
**(Protocol.UndefinedError)未为Api.User实现协议EXTO.Queryable,给定模块不存在。这
协议实现
标签: Elixir
erlang-supervisorgen-server
我们有一个依赖于Tomcat服务器的elixir应用程序。我们当前的策略是在应用程序启动时使用System.cmd调用启动.war文件。这是可行的,但是如果应用程序(或者更具体地说,运行startup命令的GenServer)退出,我们也希望关闭服务器。如何捕获GenServer的退出并在退出之前运行另一个System.cmd调用?您需要在那里执行回调
在这里,您甚至可以处理各种类型的终止原因,如:normal、:shutdown或其他自定义原因。您只需要以下内容:
module MyServe
我有下面的EXTO模式和查询,我正在尝试找出比较十进制值的正确方法
模式:
schema "products" do
field(:price, :decimal)
end
from(
p in Product,
where: p.price <= ^max_price
)
查询:
schema "products" do
field(:price, :decimal)
end
from(
p in Product,
where: p.price <=
在elixir中,您可以通过以下命令在应用程序的上下文中使用iexshell
iex -S mix
这个命令非常方便,让我们可以在交互式shell中使用应用程序函数
我想知道是否可以用参数启动交互式shell,或者是否可以让应用程序在用户可以与shell交互之前调用一些函数
例如,假设我有一个名为MyApp的应用程序,我用iex-smix启动它。而不必手动将命令输入shell,例如
iex()>导入MyApp.Module
iex()>别名MyApp.Module.OtheName
iex()
我想在自定义域和子域下运行我的开发服务器,例如:https://api.custom.local/。在Rails中,我会使用puma-dev,在Phoenix中是否有与此等效的工具?编辑您的配置/dev.exs文件。更改MyApp.Endpoint的配置。您需要添加或编辑:url键。您可以执行以下操作
url: [host: "api.custom.local", port: 4000]
然后你就可以像平常一样启动你的应用程序了。我跟踪了Justin,并对puma dev进行了一些研究
我们可
我很难在外胚层中实现多态性。我的主要问题是,我试图在Phoenix中处理多态关联,但数据来自我们的——let's be honnest——一个基于Rails的古老主应用程序使用和创建的数据库
其他模型都处理得很好,在Rails和Phoenix端读取或写入数据都没有问题
除了那些具有多态性的。我花了很多时间阅读了CTO的文档,我知道“rails方式”不是“正确的方式”,但我有点被困在这里,因为我的模型已经写在rails端(一些主题已经存储了数百万行)
因此,我在Rails中有一个抽象模型元素,它表
标签: Elixir
phoenix-frameworkecto
我正试图通过office\u id获取可用的会议室列表,其中可用性取决于预订选择的开始时间和选择的结束时间
这是我的模式
defmodule MyApp.Context.Booking do
schema "bookings" do
field :start_time, :utc_datetime
field :end_time, :utc_datetime
belongs_to :meeting_room, MyApp.Context.MeetingRoom, fo
我有一个elixir项目,我想实现一个函数,它将调用多个外部API并返回错误列表
假设我有几个调用api函数:
通过_api_a创建_
通过_api_b创建_
通过_api_c创建_
...
每个api函数将返回:ok或error。我的主函数将返回[错误a,错误b,错误d,…]
目前我的解决方案是使用++连接每个API调用。我有一个case函数来控制返回
例如:
def create_via_api_a do
case API.create(xxx) do
:ok -> []
在我的应用程序中,所有登录的用户都由GenServer表示,我称之为UserAgent,它基本上将每个用户的状态保存在内存中。所有这些进程都是基于一个唯一ID在集群的分布式注册表中注册的。每当用户执行某些操作时,客户端应用程序都会发送要与用户ID一起执行的操作。在服务器端,控制器检查参数(强制、可选、语法等),并最终调用UserAgent。The_action(…)函数只向服务器发送一条消息,其中包含要执行的操作:GenServer.call(通过\u tuple(id),{:The_actio
假设我们有模式:
schema "organization" do
embeds_one :details, Detail
timestamps()
end
# Detail schema
embedded schema do
field :name, :string
field :description, :string
end
details字段作为jsonb字段存储在数据库中
现在,假设我想通过名称查询一个组织,目前我唯一能做的就是使用片段:
Or
我有一个带有基本设置的DynamicSupervisor,我正在启动一个作为
Supervisor.start_child(Recording.WorkerStarter, %{
id: String.to_atom(detailed_camera.name),
camera: detailed_camera,
sleep: detailed_camera.sleep
})
并将其终止为
name
|> Process.whereis()
|> case do
ni
我有一个简单的模块
defmodule Flow.F1 do
def t1 do
["one", "two", "three"]
|> Flow.from_enumerable()
|> Flow.map(&p1(&1))
|> Flow.partition()
|> Enum.to_list()
end
defp p1(item) do
在中,可以使用shared\u examples创建测试并从多个位置引用它。它大大简化了开发人员的生活
有没有办法在ExUnit中使用共享示例?test宏做了一些簿记,但最终它们只是为测试定义了一个函数。ExUnit测试代码与任何其他Elixir代码一样,因此您可以使用所有通常用于消除重复的东西。您可以使用宏为自己定义类似于共享\u示例的公共测试,也可以使用函数提取在测试之间重复的公共代码 关于如何做到这一点,是否有相关的惯例?假设我有一些参数化测试和一组我想用于所有这些测试的参数集。我可以很容
在IRC中,要使连接保持活动状态,您必须使用PONGs回复PINGs,因此如果服务器向您发送PING:IRC.whater.com,您必须发回PONG:IRC.whater.com,否则服务器将关闭您的连接
我使用字符列表是因为(如果我错了,请纠正我),这就是我的TCP套接字返回的结果
因此,我对ping消息的检查的实现是,它试图返回我需要的用于pong的服务器:
[?P、?I、?N、?G、?主机]=消息
这在case块中的子句中。在我看来,这个问号后面跟一个空格看起来非常狡猾,但它确实有效
标签: Elixir
phoenix-frameworkecto
我有一个ParentModel,ChildModel1和ChildModel2。ParentModel有许多ChildModel1,ChildModel1有许多ChildModel2
data = ChildModel2
|> join(:left, [chmd2], chmd1 in assoc(chmd2, :child_model1))
|> where(ChildItem2, [a], a.child_model1.parent_mod
我的模板代码如下所示:
<%= form_for @changeset, @action, fn f -> %>
<%= if Enum.any?(f.errors) do %>
<%= for {attr, message} <- f.errors do %>
<li><%= humanize(attr) %> <%= message %></li>
<% en
我在视图中定义了一个助手函数:
def usernames(id) do
post = Repo.get(Post, id) |> Repo.preload(comments: :user)
usernames = for comment <- post.comments do
comment.user.username
end
end
那么在js.erb中应该是:
data = <% @usernames %>
$('#comment').doT
我正试图通过ElixirShell导入exto.Query,下面是凤凰城编程书中的一个示例练习,它给了我这个错误
iex> import Ecto.Query
** (CompileError) iex:3: module Ecto.Query is not loaded and could not be found
有人知道这是不推荐使用的还是以其他方式导入的吗?iex默认情况下不会加载项目或其依赖项,即使您是从项目内的目录启动它。为了在iex中加载项目及其依赖项,您需要执行iex-
我有以下代码:
defprotocol Reversible do
@doc "Reverses data structure"
def reverse(term)
end
defimpl Reversible, for: [List, Map] do
def reverse(term), do: Enum.reverse(term)
end
它工作得很好,但我想以某种方式列出所有可枚举类型,并在其他地方使用它们
所以我试着这样做:
# constants.ex
defmodul
我有一个函数confirm_user,可以用参数%user{}或nil调用它
def confirm_user(%User{} = user, attrs \\ %{}) do
Repo.update(User.confirm_changeset(user, attrs))
end
def confirm_user(nil, attrs \\ %{}) do
{:error, :not_found}
end
但根据这个定义,我得到了一个错误:
def confirm_user
标签: Elixir
phoenix-frameworkecto
我正在使用Scrivener进行外部分页。
首先,我想在电话簿中为联系人分页。所以我喜欢这个
schema "orders" do
field :counts, :integer
field :status, :string
embeds_many :line_items, LineItem, on_replace: :delete
timestamps()
end
在phonebook_controller.ex中
#显示联系人列表
def sho
我在URL提示下引用了
我有同样的问题。我想知道为什么我不能将上传的文件移动到dest文件夹。
在绝对路径的情况下,它工作。
如何设置相对路径设置
上传_controller.ex
defmodule MyAppWeb.UploadController do
use MyAppWeb, :controller
def create(conn, %{"user" => user_params}) do
IO.inspect user_params
if uploa
所以我尝试在另一个视图中为一个视图别名。但是我得到一个错误,我调用的json无法呈现
员工观点
edtr_视图
第二个参数应该是您试图调用的视图。您当前正在调用_MODULE _,它将扩展到从中调用的模块。在您的情况下,EmployeeView。您需要的是以下内容
render_one(employee.edtr, EdtrView, "edtr.json")
def render("edtr.json", %{edtr: edtr}) do
%{
id: edtr.id,
m_in:
如果我有两份清单:
第一个列表=>[1,2,3]
第二个列表=>[3,4,5]
我希望返回true,因为它们都包含3?如果将3替换为6,它将返回false,因为没有匹配的元素
当前尝试
Enum.member?(first_list, fn(x) -> x == second_list end)
外星查询:
user_teams = from(
t in MyApp.Team,
left_join: a in assoc(t, :accounts),
where: p.own
我无法让我的Elixir应用程序从Mac上的本地环境读取MIX_ENV变量。例如,运行命令
$ MIX_ENV=prod iex -S mix
引发以下错误:
** (FunctionClauseError) no function clause matching in String.split/3
The following arguments were given to String.split/3:
# 1
nil
#
如果我在hello.ex中定义了下面这样的混合任务,那么它可以正常运行
defmodule Mix.Tasks.Hello do
use Mix.Task
def run(_), do: IO.puts "hello"
end
但这在“hello.exs”类型的文件中似乎不可能?或者有没有一种方法可以在没有“.ex”扩展名的情况下执行混合任务。我不知道“没有编译”是什么意思。Elixir确实是一种编译语言,没有编译它无法执行任何操作
除了Elixir文件扩展名.ex,Elixir还支持
标签: Elixir
postgisphoenix-frameworkecto
所以我有一个很奇怪的问题。我将LatLong作为double从我的移动应用程序发送到我的phoenix后端。后端在迁移中已将类型定义为:geography。然后我将从前端获得的数据如下所示
%Ecto.Changeset{
valid?: true,
changes: %{lat_long_object: %{latitude: latitude, longitude: longitude}}
} ->
point = %Geo.
我在凤凰城乞讨。我有一个PostgreSQL数据库,用户名为“postgres”,密码为“root”。
它们在config/dev.exs文件中被正确修改
但是,当我运行“mix-exto.create”命令时,出现以下错误:
16:10:29.607 [error] GenServer #PID<0.218.0> terminating
** (RuntimeError) Connect raised a FunctionClauseError error. The excepti
因此,我正在进行一项自定义检查,旨在“识别缺少描述的graphql类型/字段定义”
代码如下所示
defmodule MockProject.MockModule do
@moduledoc false
node object1(:random_object) do
@desc "random description"
field :random_field, non_null(:random_name) do
上一页 1 2 ...
81 82 83 84 85 86 87 ...
下一页 最后一页 共 125 页