我在elixir中有一个小管道,它是关于改变exto模型状态的:
model
|> cast(params, ~w(something), ~w())
|> conditional
|> Repo.update
问题是,我有一个条件管道,它有时可能为零,因此在它为零的情况下,它应该什么都不做,并且可以工作(我假设它将是fn(x)->x end)
所以,我的问题是:“我怎么做?”
我不确定你的问题是否正确,但也许这正是你想要的。管道对于不会失败的操作来说是非常好的,而且所有管道
我正在向Elm移植一个Elixir库,该库大量使用类型规范,但我很难找到有关所用语法的文档
下面的类型表达式表示什么
@type identifier :: (String.t | MyCustomTypeA.t | MyCustomTypeB.t)
最初,我将它建模为一个元组,但现在我正在查看它的用法,它看起来可能是一个有区别的联合。但是,这个假设的问题是,我在这里没有看到任何支持这些东西的文档()。你是正确的,因为这是一个歧视性的联盟。Elixir和Erlang文档都没有直接指出这一点,但
标签: Elixir
phoenix-frameworkecto
将列类型修改为jsonb或map时出错。这是我的迁移文件:
def change do
alter table(:disbursements) do
modify :reason, :map
end
end
我收到如下错误:
** (Postgrex.Error) ERROR 42804 (datatype_mismatch) column "reason" cannot be cast automatically to type jsonb
hint:
如何通过网络连接连接两台不同机器的两个Erlang/Elixir节点?您必须命名节点并在两个节点上使用相同的cookie
在机器1中:
iex --name node1@machine1.com --cookie a_cookie_string
在机器2中:
iex --name node2@machine2.com --cookie a_cookie_string
现在这两台机器可以通信了。要测试它,您可以在machine1上执行以下操作:
iex(node1@machine1.com)1
假设我想通过组合符(如filter)传递枚举字符列表,以便删除所有a,如下所示:
'abc' |> Enum.filter(fn ch -> ch != 'a' end)
这不会返回预期结果,因为枚举字符实际上是代码点,这里是97、99和99。因此谓词可以表示为ch!=97或!=“a”以实现所需的结果。
在这种情况下,是否有更好、更直观的方式来表达谓词?您可以使用?来表达:
iex(1)> 'abc' |> Enum.filter(fn ch -> ch != ?
我知道如何使用Stream.resource()从
创建一个文件并将其放置在列表中
str = Stream.resource(fn -> File.open!("./data/fidap011.mtx") end,
fn file ->
case IO.read(file, :line) do
data when is_binary(data) -> {[data],
我需要PubSub之类的东西,但不是向所有订阅者广播,而是只向1个订阅者发送消息(最好根据接收缓冲区中的消息数自动选择订阅者,越低越好)
我尝试的是使用受控数量的分布式工作者发送数十万个http请求。要解决这个问题,我首先要尝试的是让工作者拉取要发出的请求,而不是将请求推送到他们那里
因此,我有一个全局注册的代理,它保存了http请求的列表,这些请求将通过API来执行,用于添加和检索请求。然后,我将使用worker(Task,…)和one-for-one启动N个工人,而不是在这个阶段添加pool
我正试着用uuid和外星生物。我可以查询所有,但是我得到一个无法用Repo.get编码值的错误
defmodule Rocket.Model do
defmacro __using__(_) do
quote do
use Ecto.Model
@primary_key {:id, :uuid, []}
@foreign_key_type :uuid
end
end
end
defmodule Rocket.User do
use
我不确定我做错了什么,但我已经创建了一个elixir应用程序,如果我使用以下工具运行它:
iex -S mix
应用程序加载管理器,管理器加载连接到rabbitmq并一直侦听消息的gen_服务器,但是如果我使用
mix app.start
或
已加载主管,工作进程已启动并连接到rabbitmq,但它立即结束,没有任何错误,示例代码:
mix.exs
defmodule Sample.Mixfile do
use Mix.Project
def project do
[app
在Elixir中,有一个通用规则,可以用\uu来命名任何未使用的变量。这样做会停止任何绑定到该变量的操作
然而,我注意到一种广泛使用的模式,即使用下划线作为前缀来表示被忽略的参数,其形式为\u tail(目的是提供关于变量是什么的提示)
如果您尝试访问\u tail,则该语言会通过shell中的警告鼓励您这样做:
警告:带下划线的变量“\u tail”在设置后使用。前导下划线表示应忽略变量的值。如果有意这样做,请重命名变量以删除下划线
但这里有一个陷阱\u tail将变量绑定到它,而仅使用\u时
给我一个模块:
defmodule Foo do
def bar(baz) do
IO.puts baz
end
end
有什么方法可以让我返回:
def bar(baz) do
IO.puts baz
end
我已经计算出,我可以加载模块的整个定义,包括:
Foo.__info__(:compile) |> List.last |> elem(1) |> File.read |> elem(1)
但理想的情况是,我想做一些类似的事情
Foo.b
我将遵循本教程:
因此,在我的Elixir项目中,我有一个模块lib/kv/bucket.exs,还有一个测试test/kv/bucket\u test.exs
当我运行混合测试时,我得到以下错误:**(UndefinedFunctionError)undefined function KV.Bucket.start\u link/0(模块KV.Bucket不可用)我缺少什么吗?因此,模块必须使用.ex扩展而不是.exs,您需要运行mix compile来编译新模块。在那之后,mix-test能
我正在执行某个函数
MyModule.function()
有没有办法使用这样的函数:
a = MyModule
a.function()
a = MyModule
a.function()
是的,您可以这样做:
我有一个函数,它解析html主体以获得如下所示的开放图属性
我不知道如何使用流,以便只进行一次解析——这甚至是可能的
def og(body) do
image = attribute_content(body, "meta[property=og:image]")
title = attribute_content(body, "meta[property=og:title]")
site_name = attribute_content(body, "meta[property=og:
如何在elixir应用程序中限制处理器内核数的使用
我知道我可以在erlang中使用+S命令,但我不确定如何使用elixir realm中的该命令。对于iex,您可以执行以下操作:
iex --erl "+S 1" -S mix some_task
elixir --erl "+S 1" -S mix some_task
要运行长生不老药,您可以执行以下操作:
iex --erl "+S 1" -S mix some_task
elixir --erl "+S 1" -S mix some
我有这样的经历:
defmodule N.Repo.Migrations.CreateAuth do
use Ecto.Migration
def change do
create table(:auths, primary_key: false) do
add :oauth_id, :string, primary_key: true
add :provider, :string, primary_key: true
add :user_
我想区分“未找到页面”和“未找到资源”错误。
是否可以让异常类型执行以下操作
def render("404.json", assigns) do
case assigns[:reason] do
NoRouteErro -> message = "Route not found"
Ecto.NoResultsError -> message = "Resource not found"
_ -> message = "Uncaught except
我有以下模式:
第一:
schema "countries_codes" do
# Country code based on ISO-2
field :iso, :string
field :name, :string
has_many :country, Country
timestamps
end
def changeset(struct, params \\ %{}) do
struct
在以下代码中:
defmodule ModuleToBeUsed do
defmacro __using__(_) do
quote do
import unquote(__MODULE__)
end
end
end
defmodule ModuleUsing do
use ModuleToBeUsed
end
$ cat /tmp/test.ex
defmodule ModuleToBeUsed do
defmacro __using__(_)
如果没有它,我会得到一个没有为Foo实现的exto.Queryable,给定的模块不存在。如何将EXTO查询内容拉入模型?这相当于这样做
alias Bank.Account
alias Bank.Customer
alias Bank.Deposit
alias Bank.Ledger
alias Bank.Repo
alias Bank.Transfer
alias Bank.Entry
当您有多个以相同前缀开头的模块时,此表单仅允许您保存一些击键
至于您的错误,代码可能正在执行以下操作
标签: Elixir
phoenix-frameworkecto
当我运行mix-ecto.migrate时,我遇到一个错误,(ArgumentError)外键:country\u id必须与对应的关联名称lib/ecto/schema不同。例如:1499:ecto.schema。\uuu属于\uuuu/4
我的目标是在mobiles表中添加两个外键,即conutry_id和country_code。我错过了什么
这是我的手机模式:
schema "mobiles" do
field :number, :string
belongs_to :person,
我想用is_function测试一些内置函数,但失败了:
添加=fn a,b->a+b结束
#作用
>是函数加法吗
真的
>is#u函数is#u函数#测试自身
警告:变量“is_function”不存在,正在扩展为“is_function()”,请使用括号删除歧义或更改变量名称
iex:27
如何测试内置函数?您可以使用内核.function\u exported?/3并将模块名、函数名和arity传递给它进行检查:
iex(1)> function_exported?(Kernel,
我正在尝试使用gproc for process registry创建一个主管。以下代码定义了监督员:
defmodule QueueSupervisor do
use Supervisor
def start_link do
GenServer.start_link(__MODULE__, [], name: :model_queue)
end
def create_queue(name) do
Supervisor.star
我正在学习Elixir,我想实现的一件事是一个简单的pubsub,其中发布者和消费者位于不同的节点,目前不使用Redis之类的工具
我现在正在尝试的是在没有凤凰城的情况下做到这一点。我看了几个选项,其中一个是新的注册表,但它不能远程工作
我尝试的另一个选择是gproc。Node.list()向我显示我的节点,因此集群接缝应该是正常的,但是:gproc.send({:p,:l,:event\u manager},{:message,“stuff”})仍然只在一个节点内工作
我的问题是:有没有什么标
我目前正在研究Phoenix,我想知道在完成其插入管道后,插头连接会发生什么情况
conn
|> endpoint
|> router
|> controller
|> view
文档说明,render/3函数将调用视图中相应的模板函数,并使用状态代码200响应客户端。但在这之后,连接会发生什么变化?返回是否由任何更高的调用方(例如cowboy适配器)使用,还是管道只是以未使用的打开返回结束?查看,您可以看到连接首先通过适配器发送,然后返回。这是因为还有其他插头可以连接
您好,我想构建一个库,用其他函数调用替换某些函数调用
module A do
def wrapper
B.foo
end
end
在编译的程序中,A.wrapper将实际调用B.baz。我已经偶然发现了@before\u compile回调,但似乎不知道如何更改调用模块的AST
所以我得到的只是这个
module A do
use Modifier
@before_compile Modifier
def wrapper
B.foo
end
end
我在Phoenix应用程序控制器中执行以下操作:
defmodule TattooBackend.Web.API.V1.StudioController do
use TattooBackend.Web, :controller
alias TattooBackend.Repo
alias TattooBackend.Accounts.Account
def index(conn, params) do
studios = Studio
studios =
我下面是最近在编译器上销毁所有软件的屏幕广播。所有的示例代码都是用Ruby编写的,但我试图用Elixir实现相同的输出
简单地说,我的方法是这样的:
将代码字符串传递给递归函数(call\u标记器)
循环令牌类型,并使用当前令牌类型运行正则表达式
如果找到匹配项,则将该结果附加到累加器中
结果从字符串的开头开始,并传递剩余的
字符串和累加器调用标记器。另外,:暂停while循环,并返回累积的令牌
如果没有找到结果,继续循环
我已经在Elixir中编写了几个函数,它们的工作原理是从输入中获得预期的
我在Elixir中生成一个随机字符串,如下所示:
len = 10
val = :crypto.strong_rand_bytes(len)
|> Base.url_encode64()
|> binary_part(0, len)
这段代码的输出可以包含连字符和底字符,这是我不想要的。如何将字母表限制为仅[0-9a-Z]字符
我将使用:
def模块生成器do
@字母枚举concat([?0..9,?A..Z,?A..Z])
def
我有一个三重嵌套的to case语句。这是一个完全令人憎恶的控制器正在进行的行动
但是,我很高兴我处于这种情况,因为在我看来,最好的学习方法之一就是看到代码在许多不同的方法中做同样的事情。这就引出了这个问题
我如何重构这段代码,使之与语句一起使用,而不是case?我在网上找到的所有例子都比这个例子更微不足道
代码:
我注意到我不能像这样重构:
with {:ok, games} <- Nba.get_todays_games,
{:ok, game} <- Nba.g
如何更新具有字符串键的地图?我想更新“品牌”价值
我的代码(产品是带有“品牌”键的地图):
产出:
uri decode: "\"e&ggsssssaaqss\""
json decode: "e&ggsssssaaqss"
actual product brand: "%22e%26ggsssssaaqss%22"
它没有更新产品[“品牌”]
实际产品品牌日志应等于更新后的json解码日志
我做错了什么?如果地图有如下字符串键:
my_map = %{"a" => 1,
如何使用提供的命令行标志覆盖Elixir中的配置?例如,通过运行以下命令启动应用程序:
./my_app --mode=mode1 or ./my_app --mode=mode2
根据提供的模式,我想用mode1.exs或mode2.exs覆盖config.exs,如下所示
use Mix.Config
# Configures the endpoint
config :my_app,
env: Mix.env
import_config "#{Mix.env}.exs"
impor
标签: Elixir
phoenix-frameworkrails
我真的很难理解菲尼克斯长生不老药的上下文。我有三个上下文,Auth(包含User.ex)、组(Circle.ex)和内容(ShareMark.ex)。在每个模式中,分别有模式、用户、圆圈和共享标记
我试图弄清楚如何在组上下文之外使用预先提供的创建_圈。在Ruby中是否有类似于上下文的东西
在content\u test.ex中,我试图定义以下内容
@valid_attrs%{circle:Groups.create_circle(%%{name:“我的测试”}),url:“google.com”
默认情况下,resources宏在路由的末尾附加一个/:id,用于对单个资源执行操作
然而,我有一种情况,用户必须始终登录才能对自己执行操作。我更喜欢从conn.assigns获取:当前用户,而不是通过传入/显示URL中的任何参数。我知道我总能一条一条地写出路线。我只是想知道是否有办法让资源生成这样的路径。您可以使用以下选项来实现这一点:
当需要在不引用ID的情况下查找资源时,因为它在给定上下文中只包含一个条目,:singleton选项可用于生成特定于该单个资源的一组路由
用法示例:
reso
这是长生不老药。我尝试将模块属性作为参数传递给来自不同库(通常定义新模块)的不同宏:
def模块X do
@数据类型[:x,:y,:z]
@另一个常量“某个常量值”
defenum数据类型,:类型,@data\u类型
结束
下面是另一个例子
但几乎总是在同一行上出现错误:
**(Protocol.UndefinedError)协议枚举未为{:@、[line:26]、{:types、[line:26]、nil}实现
所以我通常会重复这些值:
def模块X do
@数据类型[:x,:y,:z
通过mix命令iex-S mix打开交互式shell会出现以下错误:
def build_map(script_str) do
script_str = String.replace_leading(script_str ")", "")
script_str = String.replace(script_str, "false", "111")
script_str = String.replace(script_str, "null", "111")
sc
我一直在学习长生不老药,并试图构建一个类似于火星车卡塔的应用程序
我正在使用GenServer维护现有单个漫游者的单个状态,并在注册表的帮助下尝试生成一个键,即漫游者名称
Rover.ex代码
defstruct [:x, :y, :direction, :name]
def start_link({x, y, d, name}) do
GenServer.start_link(__MODULE__, {x, y, d, name}, name: RegistryHelper.
我有200万个数据文件要处理。
以下代码需要2小时才能完成
out_file = "./output.tsv"
result = "./input.tsv"
|> File.stream!
|> CSV.decode(separator: ?\t, headers: headers)
|> Enum.map(&(elem(&1, 1)))
|> Enum.group_by(&{
我想知道这里的最佳实践是什么?Elixir版本是在mix.exs中定义的,不同的开发人员可能希望使用不同的OTP版本(与Elixir版本兼容)或不同的次要Elixir版本
另一方面,如果每个人都使用完全相同的版本,它可以简化事情,并可能使错误跟踪变得更容易。在我所从事的项目中,它通常被签入git,有时甚至被用来确定用于构建发布的版本。如果签入项目,我建议为什么制定某种标准或流程要使用的版本。如果每个项目都有自己的固定版本,那么最终您的计算机上可能会有大量安装。我可能已经安装了十几个不同项目的er
我有这个领域
<%= number_input f, :duration_minutes %>
我想给它一个默认值60。我该怎么做
显而易见的猜测
<%= number_input f, :duration_minutes, default: 60 %>
不起作用。根据艾伦的评论更新:
schema "events" do
field :duration_minutes, :integer, default: 60
我正在尝试将此字符串列表标记为可翻译,以便它显示在.pot文件中
import XXXWeb.Gettext
@crop_types ~w(grape strawberry potato tomato rice wheat corn peas hops carrot soy sunflower other)
|> Enum.map(&(XXXWeb.Gettext.dgettext_noop("crop_types", &1)))
根据,当
给出以下地图列表:
ball_prop_list =
[
%{"id" => "cue", "is_idle" => true, "velocity_x" => 0.0, "velocity_z" => 0.0, "x" => -15.0, "z" => 0.0},
%{"id" =>
我有一个应用程序,应该支持多种类型的存储。目前,我希望它同时支持S3和swift
现在问一个问题:我如何允许我的应用程序选择在加载时使用哪个后端(如中所示,配置将指定它是S3还是swift)
在OOP中,我会有接口,并且可以注入依赖项。在这种情况下,最明显的答案是GenServer。但实际上我并不需要一个完整的专用进程(它也应该成为我代码的瓶颈)
我考虑简单地将引用作为参数传递给模块,但感觉有点不确定,因为从技术上讲,可能传递不正确的实现
因此,进一步指定:如何基于配置(没有Genserver)
在config/config.exs中有这样一个:
a1 = 123
# [.........]
# using a1 here ....
# key123: a1
import_config("config2.exs)
但是在config/config2.exs中,变量a1将不可见
为什么不呢?如何使其在config/config2.exs中也可见?
一个简单的解决方案,没有不必要的复杂性。您可以使用环境变量存储您的值并在配置之间共享-因此在config/config.exs中
标签: Elixir
phoenix-frameworkelixir-mixasdf-vm
无法使用mix-archive安装比最新版本(如1.4.0)更早的Phoenix版本(如1.3.4)。安装命令
根据此线程未实现的解决方案:
尝试在版本管理器中安装一些早期的Phoenix版本和最新版本
以下CLI命令仅安装了最新版本(如1.4.0-dev.0):
找到一个解决方法,使用以下CLI命令安装任何特定的Phoenix早期版本(如1.3.4):
$ mix archive.install https://github.com/phoenixframework/archives/raw
我试图让Ecto打印它的默认SQL调试语句,但不是用红色表示DELETE,而是用其他颜色表示DELETE,因为红色使其他开发人员认为这看起来像是一个错误
我在任何地方都找不到这样的例子。任何帮助都将不胜感激。不幸的是,这似乎是不可能的,因为颜色是。根据这一点,它可以被覆盖,但我没有看到一个如何覆盖的示例-通过在存储库配置中提供您自己的日志回调,正如答案中明确指出的那样。您是否有指向此类示例的链接?我不知道那是什么。
我正在开发一个ElixirAPI,我正在使用JaSerializer,但是在调用PostAPI时,它给了我一个类似这样的错误
function Poison.encode_to_iodata!/1 is undefined (module Poison is not available)
但在我的配置文件中,我添加了毒药并使用mime重新编译
mix deps.clean mime --build
mix deps.get
我正在调用的api也被插入到数据库中,但它没有响应任何Json,并
我无法在windows 8中安装elixir。是否有其他方法可以在windows 8中安装elixir/Phoenix?我不建议使用它,但如果您在运行安装程序时遇到问题,这可能会很有用
去
下载Precompiled.zip
将Precompiled.zip解压缩到c:\elixir
运行c:\elixir\bin\iex.bat以查看它是否可以运行
将c:\elixir\bin注册到您的路径
你有什么问题?错误消息说什么?你试过什么?建议未知的替代方案非常困难。我下载exe文件并尝试安装exe
我使用Mariaexlib在elixir项目中连接到mysql。但它不能正确处理本地语言
比如说,,
当它保存本地文本时Dương Phi Phụ对于mysql数据库,D??ng Phi Ph?ng保存在数据库中
Mariaex的默认字符集是utf8,但即使我在配置中设置charset:“utf8”或charset:“utf8mb4”,它仍然不起作用
有人能帮忙吗
Mariaex版本:0.8.4(由于遗留问题,无法更新到最新版本)
db字符集:utf8mb4
db排序:utf8mb4\u uni
在将苦艾酒从1.4.12升级到1.5.2、将ecto从2.1升级到3.0、将dataloader从1.0.2升级到1.0.7之后,我发现dataloader无法批量查找项目存在一些问题。我试着按照deepankar-j所指出的步骤去做,看看是否有什么东西与修复了use_parent:false as default问题()的PR相关,但无法解决我的问题
我完全按照文档来应用dataloader以避免N+1
一些进一步的细节:
当我在应用程序中查询特定字段时,批处理“中断”。
这就是我应用data
上一页 1 2 ...
71 72 73 74 75 76 77 ...
下一页 最后一页 共 125 页