我有一个结构,它有一个嵌套键和另一个结构列表,我想用新值更新该嵌套键值
source = get_data
# source.key1 is an array of structs
source.key1 = Enum.each(source.key1, fn(x) -> # error is here at "="
# ...
end)
错误是:
cannot invoke remote function source.key1/0 inside match
这两者都不是:
运行mix.compile时,是否可以不编译在lib目录下找到的模块或文件
如果是这样的话,我该怎么做,或者至少在Mix的源代码中我可以在哪里找到答案?您可以给它扩展名.exs?但问题是:为什么有些东西不应该在lib中编译?也许你想把它放在别处?我同意何塞的看法。这是什么用例?在目录中有长生不老药代码而不将其作为应用程序的一部分似乎很奇怪。
我一直在搜索文档,但我无法用长生不老药完成ftp。有人能帮我举一个工作示例吗?有一个示例演示如何使用Erlang FTP客户端库。以下是对长生不老药的(未经测试)翻译:
:inets.start
{:ok, pid} = :inets.start(:ftpc, host: 'erlang.org')
:ftp.user(pid, 'guest', 'password')
:ftp.pwd(pid)
:ftp.cd(pid, 'appl/examples')
:ftp.lpwd(pid)
:ftp
在Elixir中,使用EXTO可以连接属于不同两个数据库的两个不同表(在同一主机中)
此查询中有两个数据库,分别称为cloud和cloud\u usage
当我执行查询时,我应该使用哪种回购
Billing.CloudUsage.Repo.all(查询)
或
Billing.Cloud.Repo.all(查询)
我知道为什么会这样。但是如果我使用Billing.Cloud.Repo.all(query),我想我很难检索Cloud\u usage.Cloud\u usage表中的数据。反之亦然
参
运行Elixir应用程序的正确方法是什么
我正在通过以下方式创建一个简单的项目:
mix new app
然后我可以做:
mix run
escript: [main_module: App]
基本上只编译一次我的应用程序。所以当我加上:
IO.puts "running"
在lib/app.ex中,我第一次看到“running”,除非有一些更改,否则每次连续的运行都不会执行任何操作。使用生成的app.app,我接下来可以做什么
我当然知道我能做到:
mix run
escript:
我正在研制长生不老药,并希望能提供化身服务。如果用户没有头像,希望制作一个上面有他们姓名首字母的头像,如下所示:
我真的一点也不知道从哪里开始,或者怎么做。使用。这是一个Elixir ImageMagick集成。您可以使用它来完成此操作。只需通过调用convert命令并将选项传递给它即可。下面是一个简单的例子,如何生成与您发布的图像相似的图像。我将把微调留给你
def generate(outfile, initials) do
size = 512
resolution = 72
如何使用phoenix框架在elixir应用程序中启用自定义HTTP谓词
我可以看到如何在中创建宏get,post等。然而,可能是由于使用了嵌套的宏体系结构,我无法使用如下路由器定义实现自定义HTTP谓词,例如bla:
Phoenix.Router.Scope.route Ical.Router, :match, :bla, "/bla", PageController, :bla, []
虽然不会导致编译器错误,但在执行BLA/BLA HTTP/1.1请求时会生成404
它甚至在尝试使用模拟
我试图在VPS中以生产模式启动Phoenix应用程序(在开发模式下可以),因此,在编译应用程序资产后,我运行:
PORT=4001 MIX_ENV=prod mix phoenix.server
我得到:
** (Mix) Could not start application myapp: could not find application file: myapp.app
我该怎么办?使用prod环境,您需要显式编译应用程序。它不会被自动编译-这是mix.exs中build\u embe
在Elixir1.2中,他们包含了关键字“with”,但我并不完全清楚它的用途
在管道中使用函数时,在Elixir 1.2之前的版本中,您必须使用monad库或nest case语句(可以使用私有函数进行重构,但最终仍然会很冗长)。允许以不同的方式解决此问题
以下是来自以下方面的示例:
case File.read(path)do
{:好的,二进制}->
case:beam_lib.chunk(二进制,:abstract_代码)do
{:好的,数据}->
{:好的,换行(数据)}
错误->
错误
我有一个十六进制值包,我正试图处理它。它们以一条线的形式出现。例如,数据包的一部分是C0,它是192。但是,我不太确定如何将字符串值转换为整数值
如果我使用这个:
Base.decode16!(“C0”)
#
。。。我得到一个二进制文件
我认为提取这个整数值的唯一方法如下:
=Base.decode16!(“C0”)
x
# 192
这是可行的,看起来有点习惯,但我对长生不老药还不太熟悉,有点不确定这是否是最好的解决方案。如何在Elixir中将字符串十六进制值转换为整数?您可以通过以下方式
标签: Elixir
phoenix-frameworkecto
我有这样的订阅
defmodule Rebirth.Subscription do
use Rebirth.Web, :model
schema "subscriptions" do
...
belongs_to :user, Rebirth.User
...
end
...
def update_user(model, params \\ :empty) do
model
|> cast(params, @required
是否有可能找到采用了特定行为的每个已加载模块
我正在构建一个非常简单的聊天机器人,我想制作一些很酷的命令,但要实现这一点,我需要一种实现多个命令的方法,最好不用硬编码
每个命令都是一个函数,它接受三个参数(message、author、chat\u channel\u ref)并返回true或false,无论它是否匹配并执行某些操作
当我浏览Elixir教程时,我发现如果我能找到所有采用它们的模块,它可能会很好地满足我的需要。你们以前有人做过吗?我还能做什么?我还考虑过“使用”(在使用中,我会执
标签: Elixir
phoenix-frameworkecto
我对长生不老药和凤凰是个新手。我试图用mix-exto.migrate为几个迁移文件运行迁移,但它抛出了这个错误
18:27:24.471 [info] == Running FatLobster.Repo.Migrations.CreateRecipeTable.change/0 forward
** (Ecto.MigrationError) cannot execute command outside of block
(ecto) lib/ecto/migration/runn
我有三种型号User,Group,UserMembership
它们之间的关系是密切的
defmodule Samajika.Group do
has_many :user_memberships, MyApp.UserMembership
has_many :users, through: [:user_memberships, :user]
end
UserMembership模型有一个type列,用于存储成员资格的类型。例如,它可能存储所有者,租户等
现在我想查询组,并获取其成员
我正在努力学习长生不老药(但主要是函数式编程)
我正在实现一个非常简单的GenServer,它基本上包装了一个条目列表。每个参数的最大条目数和最大大小(字节)受到限制(配置文件)
我知道这看起来很简单,但基本上我正在尝试找到一种优雅的功能性方法来实现这一点。我的头脑是程序化的,我总是在一个“嵌套的if-else-hell”中使用=操作符,就像它是C操作符一样
thx我所知道的验证多个参数的最干净的方法是exto及其变更集。您可能想要实现非常类似的东西
创建包含值和验证错误的数据结构
使所有验证函
我正在尝试使用HTTPotion发布到slackapi。我遇到了一个关于它的问题,它为我指明了正确的方向,但我不断地犯错误:
HTTPotion.Response{body: "invalid_payload",
...
我的代码是
HTTPotion.post "https://hooks.slack.com/services/T00000000/B0000000/xxxxxxxxxxxxx", [body: "{'channel': '#elixir', 'username': 'elix
翻阅这本书,我看到一个函数如下:
defp put_pass_hash(changeset) do
case changeset do
%Ecto.Changeset{valid?: true, changes: %{password: pass}} ->
put_change(changeset, :password_hash, Comeonin.Bcrypt.hashpwsalt(pass))
_ ->
change
我有一个简单的elixir应用程序在一个节点上运行,exrm在需要时通过升级/降级来正确地完成他的工作
我最近决定创建两个节点(它将在两台独立的机器上,但我想先在本地主机上测试它)
所以我读了下面克里斯·麦考德的文章
我现在有两个节点
n1@127.0.0.1
及
n2@127.0.0.1
在混合配置中添加以下内容
config :kernel,
sync_nodes_optional: [:"n1@127.0.0.1", :"n2@127.0.0.1"],
sync_nodes_ti
标签: Elixir
phoenix-frameworkecto
显示了如何执行插值值。但我的查询中需要动态字段。我有几十个字段,为每个字段编写的查询似乎都不连贯
defmodule Hedone.SearchController do
use Hedone.Web, :controller
alias Hedone.User
def idade(conn, %{"idade+" => maior, "idade-" => menor, "campo" => campo}) do
IO.inspect campo
我有一个模型,它通过HABTM联接表具有多对多关联。然而,我的联接表并没有唯一地映射我的行,因此我需要添加一个group_by子句来获取我的唯一行
使用Repo.preload时,是否有方法通过表达式添加分组
Repo.get!(P1, p1_id)
|> Repo.preload(:c0)
生成的查询:
SELECT
c0.*, p1."id" FROM "c0" AS c0
LEFT JOIN "p1" AS p1
ON p1."id" = 2
LEFT JOIN
长生不老药初学者在这里。我正在尝试从iex运行hello world elixir脚本
该脚本是一个基本的hello world示例
IO.puts "Hello World!"
我从iex运行以下命令
iex(1)> elixir hello.exs
并获取以下错误:
** (CompileError) iex:1: undefined function elixir/1
不知道我为什么会出错,如果有任何帮助,我们将不胜感激。谢谢所以答案不会隐藏在评论中:
您应该从shell运行e
如何在URL中指定特定参数的格式?例如,对于此URL:my_website.com/users/123我希望URL中的user\u id参数为整数和正
我该怎么做?它是通过正则表达式通过web/routes.ex完成的吗?这在凤凰城的路由器中是不可能的,因为路由器的实现方式——它只能将路径段(介于/之间的文本)与精确的常量字符串、带有常量前缀的字符串或任何字符串匹配。您可以在控制器操作中手动检查它,如下所示:
def show(conn, %{"user_id" => user_id})
标签: Elixir
phoenix-frameworkectotimex
在我的Phoenix应用程序中,我有一个带有日期/时间字段的表单,该表单将日期时间值按以下格式放入参数中:
2016-11-30 20:00
我可以使用库解析它:
其结果是:
{:ok, ~N[2016-11-30 20:00:00]}
“~N[2016-11-30 20:00:00]”是一个“原始”日期时间值,不包括时区。问题是:此值类型与exto.DateTime不匹配,所以我无法将其放入变更集中并保存到数据库中
问题:如何将字符串中的日期和时间解析为具有特定时区(例如美国/东部)的EX
我正在学习Phoenix/Elixir,并试图找出如果您的应用程序同时使用web作用域和api作用域,那么正确的约定是什么。此时,我为API创建了另一个控制器,DatapointApiController,它位于与web视图控制器相同的目录中,DatapointController
我很确定关于如何处理这件事有一个惯例?在哪里放置API范围的控制器更合适,在项目中应该放在哪里
我的router.ex文件应提供足够的上下文:
defmodule Web.Router do
use Web.We
我已经发布了我的elixir应用程序。
当应用程序启动时,它开始使用DB运行受监督的任务
数据库未迁移时,任务保留错误,应用程序终止
我读了,并试图实现迁移功能,但失败了,因为需要启动应用程序来加载应用程序的配置,它使命令终止
当我运行应用程序.get_all_env(:my_app)而不启动我的应用程序时,它返回空列表[]。
是否可以运行exto.Migrator.run(MyApp.Repo,path,:up,all:true)而不启动应用程序?使用application.load(:my_
我正在设置一个Phoenix应用程序,该应用程序为来自同一端点的多个子域提供服务。它所做的只是使用一个插件,根据请求的子域,在端点插件的末尾选择一个不同的路由器。一切正常
问题在于force_ssl配置
我的端点配置如下所示:
config :frontend, Frontend.Endpoint,
on_init: {Frontend.Endpoint, :load_from_system_env, []},
url: [scheme: "https", host: "myapp.co
使用长生不老药最直接、最有效的方法是什么
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
在Erlang中,可以编写'1'以获得名为atom的整数。Elixir使用语法:来定义原子,但是:1不可能:
iex(1)> :1
** (SyntaxError) iex:1: unexpected token: ":" (column 1, codepoint U+003A)
Elixir中有没有生成名为atom的整数的方法?您可以将1放在引号中,并在前面加上前缀:以获得Erlang中的'1'的等价物:
iex(1)> :"1"
:"1"
iex(2)> :'1'
:"1
我需要在我的web/router.ex文件中定义两个管道,如下所示:
pipeline :api do
plug :accepts, ["json"]
plug :fetch_session
plug MyApp.Plugs.ValidatePayload
end
pipeline :restricted_api do
plug :accepts, ["json"]
plug :fetch_session
plug MyApp.Plugs.ValidatePayload
我的HTTP请求的响应主体是XML。XML非常复杂,可能包含双引号。
我想通过在代码中提供一个典型XML响应的示例来模拟响应。我似乎找不到将XML作为简单字符串提供的方法。
下面是一个XML开头的例子,它会给长生不老药带来很多痛苦:
<Title xmlns="http://website/namespaces/thing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" .... >
HTTPoison的主体响应为主
Elixir对于在嵌套结构的深处添加或更新值非常有用。但是,它不支持删除该值,而且我在的任何地方都看不到delete\u
是否存在中的delete\u、中的pop\u或其他等效项?差不多
def delete_in(data, keys) do
put_in(data, keys, :magic_value_that_deletes_the_final_key)
end
如果没有它,添加和更新函数看起来就像漂亮的管道,但是删除或弹出函数看起来不那么整洁。是的!将函数作为第三个参数,根据
我是新手。在“函数”部分联机浏览时,我发现了匿名函数。在匿名函数中,函数定义如下
iex> sum = fn (a, b) -> a + b end
iex> sum.(2, 3)
5
我的问题是调用匿名函数时使用的重要性是什么 使用很容易解释
通过示例进行解释,您必须使用向编译器指示sum是一个标识符,用于描述包含函数引用的变量,而不是一个标识符,用于描述具有正常数据类型或命名函数的变量
因此,当您看到使用点语法调用函数时,您将知道它是一个匿名函数,而不是试图查找
例如,我有一个API客户机,它返回json(作为字符串,未解码)。现在,我不得不做这样的事情
def show(conn, params) do
{:ok, json} = ApiClient.fetch(params["options"])
json conn, Poison.decode!(json)
end
如果我避免中毒。解码,那么响应将是一个巨大的字符串而不是json。我能不能略去毒药。以某种方式解码?对我来说,这似乎是一种过分的行为
注意:我使用的是phoenix 1.3
标签: Elixir
otperlang-supervisor
我目前有一名主管,负责监督一些任务。该任务负责异步发送电子邮件和更新数据库。我正在测试一个函数,该函数将启动这些任务,尽管该任务与测试无关
当我运行测试时,我看到STDOUT中打印了exto.stalentryerror。我相信这是因为在测试完成后,但在任务运行之前,Ecto将删除记录。当它试图更新记录时,它不存在,因此会发生exto.stalentryError
作为旁注,测试没有失败。它只打印堆栈跟踪
我不确定是否应该尝试以某种方式阻止任务执行,或者是否有其他方法。这是一个完美的任务用例
让
我在需要访问同一Postgres数据库的不同Erlang VM实例中有N个非Erlang PID的工作进程,其中N>=2。当这些工人升级时,我希望能够自动运行Ecto迁移,这样当我对这些工人进行升级时,我就不必经历停止所有工人、运行迁移、重新启动所有工人(如果可能的话)的过程。然而,当我思考这个问题时,我能想到的唯一解决方案是:
请另一名工作人员专门执行迁移。这是我最终可能使用的路径。
使用[insert NoSQL db here]代替Postgres。我宁愿不这样做。
提出一种策略,在工作节
我有一个用承载令牌进行身份验证的API。我想将令牌解码为用户id,查找一个用户,并将该用户添加到他们在post请求中创建的项目中
我使用如下硬编码用户使项目环境中的一切正常工作:
def changeset(%Project{} = project, attrs) do
project
|> cast(attrs, [:name, :url])
|> validate_required([:name, :url])
|> put_assoc(:u
我想要一个端点/api/api_endpoints/列出所有公共api端点。类似于mix phx.routes,但我只想列出如下内容
...
GET /api/users
PUT /api/users/name
...
诸如此类的事情。我查看了文档,但没有看到任何列出路线的内容。没有内置任何内容,但对于像您希望的那样简单的内容,您可以随时滚动自己的路线。所有路由都作为Phoenix.router.Route stucts列表存储在路由器中。例如,在名为“住宅”的项目中:
您可以映射它们,提取动
我正在学习长生不老药通过建立一个简单的井字游戏。现在我设置它的方法是在棋盘上有玩家选择单元,如{col,row}所以{0,0},{1,2}等等。所有的移动都存储在一个名为turns的地图集中
%TTT{turns: %{x: MapSet.new, o: MapSet.new}, last_player: :player}
我已经完成了基本游戏逻辑的实现,但是我很难尝试构建一个简单的游戏命令行表示,尤其是在显示棋盘的当前状态时。有什么建议吗?对于基于坐标的板,我通常使用{col,row}键将板
标签: Elixir
phoenix-frameworkecto
我在Elixir表单中添加了一个textarea,并将该值设置为string,并将该字符串放入数据库元数据列中,该列属于jsonb类型。text区域中的字符串我希望按新行拆分,并存储一个字符串的数组,而不是一个大字符串
我已经改变了类型如下
field :names, {:array, :string}
但是,我不确定如何使用Ecto截取这些数据,并在数据进入数据库之前将其拆分
我看过:
文件
博文
似乎我可以在模式中添加验证函数,这是我的尝试
def changeset(schema
我有一个应用程序,是一个与牛仔和使用插头的网络服务器。由于这个应用程序是继承下来的,使用凤凰城是不可能的,除非我们重新制作整个程序,这是不可能的
我的目标是,不要把所有东西都放在一个大文件中,而是用几个插头通过管道连接起来
代码
假设我有一个主路由器插头,看起来像这样:
defmodule MyApp.Web.Router do
use Plug.Router
plug(:match)
forward "/check", to: MyApp.Route.Check
forwa
我已经实现了一个简单的应用程序->DynamicSupervisor系统,其中应用程序在启动时创建一个DynamicSupervisor,然后向其发送一条消息以开始一些工作。问题是没有一条消息(通过GenServer的cast、内核的send)被捕获。尝试GenServer.call()会引发以下错误
DynamicSupervisor.handle\u调用/3中没有匹配的函数子句
这是奇怪的,因为我已经实现了它(根据该规范)。我确信DynamicSupervisor模块启动后不会退出
应用模块
我对长生不老药非常陌生,正在尝试构建我的第一个端点。我刚刚用mix phx.new安装了一个新应用程序,并创建了我的第一个控制器
defmodule AuthWeb.AuthController do
use AuthWeb, :controller
def login(conn, params) do
IO.puts(inspect(params))
redirect(conn, external: "https://google.com")
end
end
使
只是好奇,因为配置已经从Elixir1.9中删除。我不完全理解在Elixir中加载配置文件的首选方法。对于开发,我应该仍然创建config/config.exs吗 只要您使用mix,配置都是相同的,这意味着在开发阶段您仍然可以使用旧的配置
这些更改是在与distillery一起部署时引入的。添加了运行时配置,而不是编译时配置
这样做的好处是,每次重新启动服务器时,您都可以根据一些变量(通常是环境)生成新的配置
您仍然可以使用旧的配置,但是您很快就会发现运行时配置功能更强大。您可以在我的一篇文章中
标签: Elixir
phoenix-frameworkecto
我是网络开发的初学者,请原谅我知识的缺乏
我有一个老师和一个学生外部模式。它们应该通过另一个名为Class的模式通过以下规则链接:
每个班级只有一名教师,并且有一组学生
每个老师都可以参加许多课程
每个学生都可以参加许多课程
以下是我迄今为止构建的模式:
# Part of student.ex
schema "students" do
field :active, :boolean, default: false
field :birthday, :date
field
我想在对象列表下面排序,以便返回列表按照提供的键列表的顺序包含对象。例如:
Given object list:
my_list==> [{"ipnetworkaddress", [], "33.33.123.148"}, {"httpbrowsertype", [], "Mozilla"}, {"hostname", [], "example.com"}]
Give
标签: Elixir
phoenix-frameworkectochangeset
我对长生不老药、凤凰和埃克托还不熟悉,所以我正在学习一个视频教程。本教程通过模式为用户设置凭据,每个用户都有一个唯一的凭据。所以我有一个用户:
defmodule Foo.Accounts.User do
use Ecto.Schema
import Ecto.Changeset
alias Foo.Accounts.Credential
schema "users" do
field :name, :string
field :user
我有一个关于Phoenix LiveView组件(v0.15.4)的问题
在文档中,有一个示例代码:
def handle_info({:updated_card, card}, socket) do
send_update CardComponent, id: card.id, board_id: socket.assigns.id
{:noreply, socket}
end
LiveView组件没有handle\u info/2回调,因此调用send\u update/3将事件从
在具有3个select标记的phoenix LiveView表单中,第一个标记会影响其他两个标记,即从属两个标记应仅显示第一个标记可用的选项,如下所示:
<%= f = form_for @changeset, "#", id: "eval-form", phx_target: @myself, phx_change: "validate", phx_submit: "save" %>
<%=
我正在编写一个Elixir库,它的行为在很大程度上取决于用户提供的字典文件。我在编译时处理文件,如下所示:
defmodule SomeModule do
@dictionary Application.get_env(:some_lib, :dictionary_file)
|> do_some_processing
...
end
父项目可以指定在其config.exs中使用哪个字典文件:
config :some_lib, dictionary_file: "/
当我在mix.exs中定义别名并运行mix-help时,它只是将其描述显示为“在mix.exs中定义的别名”
例如,假设我有一个mix.exs:
defp aliases do
[
play: "run --no-halt"
]
end
然后,mix help命令显示如下任务列表:
...
mix local.rebar # Installs Rebar locally
mix new # Crea
上一页 1 2 ...
27 28 29 30 31 32 33 ...
下一页 最后一页 共 125 页