有没有一种方法可以使用mix或mix hex直接通过命令行为Elixir项目安装依赖项
我知道可以通过以下方式搜索hex注册表
$ mix hex.search httpoison
Package Version URL
httpoison 0.11.0 https://hex.pm/packages/httpoison
然而,我正在寻找类似的东西
$ mix hex.install httpoison
它将修改我的mix.exs文件,将依赖项的名称和最新版本添加到deps函
标签: Elixir
phoenix-frameworkecto
我想使用postgres-IN操作符(带EXTO库)查询jsonb字段
此代码使用简单的=运算符:
from a in query, where: fragment("?->>'format' = ?", a.properties, "foo")
但我无法进行任何这些尝试:
from a in query, where: fragment("?->>'format' IN ?", a.properties, ["foo", "bar"])
from a in query
标签: Elixir
phoenix-frameworkecto
我正在为freeradius mysql开发RESTAPI(所以我不管理数据库…)
Freeradius有一个奇怪的模式:
“组”表:
“用户”表:
我的问题是我想做:
schema "radusergroup" do
belongs_to :user, Rascal.User, foreign_key: :username, references: :username, type: :string, primary_key: true
field :priority, :integer
我需要使用Enum.each将列表项传递给函数
ex:
users= [1, 2, 3, 4, 5]
#how to link the handler_user function in Enum.each?
users
|> Enum.each handler_user
def handler_user user_id
end
那么,我该如何创建链接呢?您必须使用它来捕获函数:
users = [1, 2, 3, 4, 5]
Enum.each(users, &handl
我有一个Python脚本,它是作为我正在编写的Elixir库的一部分运行的——也就是说,在启动应用程序时,我在一个start\u link函数中运行System.cmd(“Python”,[path/to/script])
我将脚本安装在用户的deps/mylibrary/lib文件夹中
路径/to/script是我不知道怎么做的部分-我可以通过计算System.cwd()并查看结果来推断脚本的位置,但这似乎是错误的
我想一定有办法使用Mix来实现这一点。库/包在运行时需要的文件应该存储在pri
我想知道phoenix.gen.json和phx.gen.json有什么区别
我目前正在使用Phoenix 1.3。Ubuntu 16.04LTS。以及以下版本的Erlang/Elixir
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false]
Elixir 1.5.1
使用phoenix.gen.json:
$> mi
我正在尝试创建一个按钮,使给定用户成为管理员。为此,我想为请求post/users/:id/admin创建一个路由。为此,我尝试创建一个嵌套资源,如下所示:
resources "/users", UserController, only: [:new, :create, :index] do
resources "/admin", UserController, only: [:post]
end
但当我运行mix phx.routes | grep用户时,我只会得到这些路由:
user
标签: Elixir
phoenix-frameworkelixir-mix
在启动phoenix服务器时,我正在尝试从mac加载一个API密钥作为系统环境。我做错了什么?以下是我的步骤:
在我的mac终端上:
export API_NOTIFICATION_KEY=1234
在我的config.exs中
config :app, App.Notifications,
notification_api_key: {:system, "API_NOTIFICATION_KEY"}
在我使用它的模块中
@api_notification_key Application
如果我想用C#来指定时间量(例如在计时器中),我会说TimeSpan.FromSeconds(20)。这是明确的…有点冗长,但我指定的时间长度毫无疑问
完成同样的事情的“长生不老药”是什么?我可以说1000*20,但这是隐含的,不是明确的。没有明确的方法来说明。我指的是秒、微秒,甚至是时间。输入时没有秒没有微秒。也就是说,真空中的值不能是“秒”,它只是一个整数
时间分数只有在对时间进行数学运算时才有意义,并且所有相应的函数都有一个参数,允许您显式指定它
考虑函数,它向时间实例添加指定数量的时间分
我知道,在elixir中,要从列表中删除重复值,需要使用Enum.uniq(my_list)
给定一个[1,1,2,3,3,4,5]列表,我将使用什么作为结果[2,4,5]。有没有不使用嵌套循环的方法?您可以使用它来计算每个元素的数量,然后只获取出现一次的项目:
[1,1,2,3,3,4,5]
|>枚举频率()
|>枚举筛选器(&match?({,1},&1))
|>枚举映射(&elem(&1,0))
或者,从链接的问题中,您可以使用相当模糊的:
list=[1,1,2,3,3,4,5]
un
我的blank.ex是:
输入iex,输出为:
iex(18)> Blank.blank? []
true
iex(19)> Blank.blank? [6]
false
iex(20)> Blank.blank? '12'
false
iex(22)> Blank.blank? "' "
true
iex(23)> Blank.blank? "elixi"
true
iex(24)> Blank.blank? {1}
true
iex(25)> Bla
我想检查Elixir中给定给函数的参数类型是否是字典。如何做到这一点?首先,您必须知道Elixir支持两种字典类型
Erlangs本机映射类型(用于仅包含有限项的映射)
map=%{}
Elixirs自己的字典类型(具有潜在大负载的字典)
dict=HashDict.new
但是,这两种类型都需要使用Erlangs native:erlang.is\u map进行检查
def some_fun(arg) when :erlang.is_map(arg) do
#do your thi
作为Elixir和web领域的新手(没有web框架经验),我想知道什么是Plug?据我所知,Cowboy是一个web服务器(虽然是Erlang,而不是Elixir),Phoenix是一个构建web应用程序的框架,但插件从何而来?它是介于两者之间的抽象层,还是与Phoenix位于同一抽象层中的插件系统
它是两者之间的抽象层吗
是的,没错!Plug是用于不同web服务器的通用适配器。目前,我们只支持牛仔,但也有工作支持其他人
插头还定义了不同组件应如何连接在一起。与Ruby中的Rack、Python
我正在阅读github上的一些代码长生不老药代码,我看到|>经常被使用。它不会出现在文档站点的列表中。这是什么意思
i、 e
这是最新的。从链接的文档中:
此运算符将左侧的表达式作为右侧函数调用的第一个参数引入
例子
iex>[1,2,3]|>List.flatte()
[1,2,3]
上面的示例与调用List.flant([1[2],3])相同
除了Stefan的出色响应之外,您可能还想阅读本文中名为“管道操作员”的部分,以便更好地理解管道操作员打算在Elixir中解决的用例。重要的想法是:
不应该返回“hełło”,因为它使用相同的代码点吗?我现在明白了,当值超过255时,需要告诉位字符串如何对值进行编码。以下内容正确打印字符串
iex(1)> 'hełło'
[104, 101, 322, 322, 111]
iex(2)> <<104, 101, 322, 322, 111>>
"heBBo"
#=>“他”
Edit1:为了更详细地说明我为什么得到“heBBo”,理解值的截断是如何工作的很重要。一个字节可以存储256的
我希望第一部分输出1-100到屏幕,但它什么也不做。如果我不使用spawn,只在第二行说IO.puts(I),它工作得很好——因此在每次调用中,IO.puts都工作得很好。HELLO部分工作正常,因此IO.put在一个spawn中工作正常。但这两者的结合不会产生任何效果
这是为什么?注意:如果您将代码保存在.exs文件中,并使用elixit.exs在命令行上运行,则可能会重现此问题
接受它将在另一个进程中执行的函数
派生的进程将执行给定的函数,并在函数完成后退出
在您的情况下,运行代码的父进程
更新:对于从谷歌得到这个问题的任何人,您可以通过运行混合测试来运行给定长生不老药项目的测试
根据,Elixir脚本文件(扩展名为.exs)在运行之前不需要编译
以下是《长生不老药》文档的准确引用:
测试文件是一个Elixir脚本文件(.exs)。
这很方便
因为我们不需要在运行测试文件之前编译它们
因此,我向faker库添加了一个模块文件和测试文件
我已经通过在项目根目录中运行mixcompile编译了项目
当我尝试使用mix test运行新测试文件之外的所有测试文件时,就会出现问题。我收到以
我在top_navigation.html中有一个应用程序顶部导航的模板,其中包含“登录”、“注册”以及登录时的“注销”链接
还有Javascript:
$(".js-login").on("click", e => {
e.preventDefault()
$(".js-login-alert").hide()
})
$("#login").on("submit", e => {
e.preventDefault()
let form = $("#login")
标签: Elixir
phoenix-frameworkecto
我在理解模型中的变更集时遇到问题。它是干什么的?一个模型中可以有多个变更集吗?e、 g.一个用于创建,另一个用于更新
有没有人可以用一种简单的方式来阐述,这样可以帮助其他来凤凰城的人 来自:
变更集允许在操作模型时过滤、强制转换、验证和定义约束
在EXTO模块的介绍性文档中有一个使用变更集的示例。函数change/2和cast/4是创建变更集的常用入口点,而其余的函数用于操作变更集
变更集用于创建和修改模型。变更集实际上是一个存储一组变更(以及验证规则)的结构。您可以将变更集传递给您的Ecto
我使用凤凰卫视的网页包。当我使用iex-S mix phoenix.server启动服务器时,将输出许多^H。像这样
iex(1)> ^H^H^H^H^H^H^H^H^H^H^H^H 0% compile
^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H 10%
0/1 build modules^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H 70%
1/1 build modules^H^H^H^H^
我有一个通用加载程序,用于从数据库中获取记录:
defmodule Loader do
defmacro __using__(opts) do
quote location: :keep, bind_quoted: [schema: opts[:schema]] do
def one(id), do: unquote(schema) |> Repo.get(id)
def all, do: unquote(schema) |> Repo.
例如:
map = %{a: 'apple', o: 'orange'}
给定上面的映射,我想得到值'orange'的键 要获取映射中特定值的键,可以执行以下操作:
map
|> Enum.find(fn {key, val} -> val == 'orange' end)
|> elem(0)
上面返回:o。请注意,在标准库中没有为我们执行此操作的函数。这可能是因为我们不打算根据映射中的值获取密钥。基于键获取值总是更有效。也许你可以重新考虑如何使用地图,并找到一种方法使成
我有一个简单的模型(简短版本):
我希望@derivate在尝试编码模型时排除:company关联,但它似乎没有。使用Guardian序列化程序时会发生这种情况:
defmodule MyApp.GuardianSerializer do
@behaviour Guardian.Serializer
alias MyApp.Repo
alias MyApp.User
def for_token(user = %User{}), do: { :ok, "User:#{user.
我不熟悉长生不老药。我有以下代码:
defmodule DefaultParams do
def func(p1, p2 \\ 2, p3 \\ 3, p4) do
IO.inspect [p1, p2, p3, p4]
end
end
使用此代码,我可以:
DefaultParams.func("a", "b") #=> ("a", 2, 3, "b")
我理解为什么它是这样工作的:因为模式匹配。Elixir尝试将提供的参数与函数定义中定义的参数相匹配
但是,我不明白
我需要为我的Phoenix/Elixir应用程序创建一个简单的布局层次结构,并从不同的布局继承我的模板。我知道如何对单个布局和多个模板执行此操作。但是,如何从一个布局继承另一个布局呢
比如说,层次结构是layout1->layout2->layout3和template2(layout2)、template3(layout3)
文件中没有提到这一点
更新:
基本布局是基本布局——类似于OOP中的基类,它不知道它的子布局——有多少布局,如果有的话。因此,从基本布局调用“render childre
以前,我一直使用表记录系统中的使用情况和页面视图。我现在正在凤凰城写一个系统,试图找出如何最好地跟踪使用情况
目前我正在使用一个插件来插入日志。但是,我无法跟踪页面生成时间,因为插件在页面生成过程开始时被调用,而我不知道如何在最后调用它
有没有办法做到这一点,或者更好的办法,我在谷歌上找不到
但是,我无法跟踪页面生成时间,因为插件在页面生成过程开始时被调用,而我不知道如何在最后调用它
您可以使用在生成页面之后和发送响应之前执行fnPlug.Logger显示响应请求所用的时间
def call(c
我想用application/jsoncontent类型来处理传入的帖子。我只是尝试返回发布的JSON作为对测试的响应,如下所示:
WebhookController控制器
pipeline :api do
plug :accepts, ["json"]
end
def handle(conn, params) do
{:ok, body, conn} = Plug.Conn.read_body(conn)
json(conn, %{body: body})
end
路由
标签: Elixir
phoenix-frameworkplug
我正在开发一个香草Elixir/Phoenix应用程序,并按照书中的一般步骤实现了一个基本的登录和注销系统(请参见下面的代码片段)。但是,我在书中或网上没有看到关于如何设置基于cookie的插件会话在一定时间后过期的建议。Phoenix应用程序中的会话超时有哪些方法
以下是我的裸体身份验证系统的一些相关片段:
在endpoint.ex中,应用程序配置为使用基于cookie的只读会话:
plug Plug.Session,
store: :cookie,
key: "_zb_key",
标签: Elixir
phoenix-frameworkecto
我试图通过连接查询中的另一个表来返回值,但如果从辅助表中找到非值,是否仍可以在最终结果中包含元素
我的问题是:
Repo.all(from p in Subjectclass, where: p.user_id == ^user.id,
join: f in Subject,
on: p.subject_id == f.id,
标签: Elixir
phoenix-frameworkelixir-mix
我有大量的quantum作业在我的iex中生成日志垃圾。从我的phoenix应用程序:
# config/dev.exs
config :quantum, MyApp,
cron: [
# Tons of jobs here
]
因此,我希望这个部分只包含在phoenix.server的configs中,而不包含在IEx中。我该怎么做?您可以使用iex.started?/0检查iex是否正在运行。如果将其放入除非并将配置调用包装在其中,则仅当iex未运行时才会添加配置:
# c
我设计了类似“TeamRepo”的数据库。预加载(:Team)可以像RoR一样工作
成员_controller.ex
plug :load_teams when action in [:new, :edit]
defp load_teams(conn, _ ) do
query = from(t in Team, select: {t.team_name, t.id})
teams = Repo.all(query)
conn
|> assign(:teams, tea
我想动态构建一个原子列表,可以没有原子,也可以有不同的后缀,比如:
fields = [:title#{suffix}, :body#{suffix}]
是否有sigil(或其他简单方法)?
或者这里的宏足够简单吗?您可以通过在字符串之前放置一个:来实现这一点,并且字符串中可以包含插值:
iex(1)> suffix = "_foo"
"_foo"
iex(2)> fields = [:"title#{suffix}", :"body#{suffix}"]
[:title_foo,
当我的函数得到{:error,reason}而不是false时,我想停止reduce_
我的代码是:
Enum.reduce_while(
[1,2,3,4],
0,
fn filename, _foo ->
if carica() do
IO.puts "OK"
{:cont, carica()}
else
IO.puts "KO"
{:ha
我想将我的帐户上下文函数放入它们自己的文件中,然后将它们导入到上下文中,这样我就可以在控制器中为App.Accounts添加别名,并使用导入到上下文中的函数
请参阅下面的粗略设置,我是后
defmodule App.Accounts.UserAPI do
alias App.Accounts.User
def get_user!(id), do: User.get!(User, id) end
defmacro __using__(_) do
import App.Acc
我对Elixir还是一个新手,在存储库中查看一些代码,想知道是否有办法减少以下代码片段:
def find(client) do
Common.find(client, @resource)
|> ResponseHandler.handle_response(@model_module)
end
def find(client, identifier) do
Common.find(client, @resource, identifier)
是否有在中添加默认回退值的选项
情景:
merge_maps = get_in(
payload, ["msg", "clicks"]
) ++ get_in(
payload, ["msg", "opens"]
)
如果在嵌套的“msg”映射中找不到键“clicks”或“opens”,get_in/2将返回nil,然后抛出错误:
** (ArgumentError) argument error
:erlang.++(nil, nil)
(stdlib) erl_ev
我列出了一个记录列表(包)
这些包通过多对多关系链接到项目:
包里有很多包
这件商品有许多包装
物品有多个:包装,通过:[:包装,包装]
包装有许多:物品,通过:[:包装,:物品]
当我列出这些包时,我想预加载它们的活动项目
def list_packs(params) do
packs = Pack
|> preload_active_items()
|> Repo.all()
|> Repo.preload([:classroom, [pac
我正在读《长生不老药》,我对=操作符作为匹配操作符有点困惑
网站上说
Elixir,=运算符实际上称为匹配运算符
它给出了一个例子:
iex> x = 1
1
iex> x
1
iex> 1 = x
1
iex> 2 = x
** (MatchError) no match of right hand side value: 1
出于某种原因,我仍然不明白1=x在做什么。如果我将刚刚分配的变量的值放在=的左侧,它将返回1,如果值不相同,它将抛出错误。我真的看不出这有什么
标签: Elixir
phoenix-frameworkguardianueberauthguardian-db
为了使JWTs无效,人们使用两种方法之一
黑名单/白名单(带guardian_db)
一个刷新令牌(允许重新生成访问令牌)和一个短的过期访问令牌
我不想在我的项目中使用guardian\u db。那么,如何在登录端点中生成访问令牌和刷新令牌?
我的代码是:
文件mix.ex
# Authentication library
{:guardian, "~> 1.0"}
文件config.exs
# Guardian configuration
假设我有一个简单的genserver,它包含一个简单的:队列作为它的状态。不断添加带有手柄的物品。每隔5秒,我使用process.send\u处理队列。通过回拨处理当前状态下的_信息来处理该调用。处理并清空队列,然后应用一个新的空队列作为genserver的当前状态
我的问题是:
在处理队列时,当调用进入genserver时会发生什么情况?因为我返回了一个新的空队列来处理{u info{:noreply,:queue.new},所以它会覆盖在我处理队列时添加的项目吗?或者genserver强制转
我正在尝试在我的eex模板中执行以下操作:
<% current_production_date = nil %>
<%= for widget <- @widgets do %>
<%= if (current_production_date != widget.production_date) do %>
<!-- ... output a new date header and re-assign current producti
我正在尝试解析由应用程序管理的GenServer,该应用程序使用elixir 1.9中的注册名称。下面是一些示例代码:
defmodule Experiment do
use Application
def start(_type, _args) do
child_specs = [
config_spec()
]
Supervisor.start_link(child_specs, name: Experiment, strategy: :one
标签: Elixir
otperlang-supervisor
我试图输入节点的数量,并为每个节点启动genserver进程;即每个GenServer.start\u link(n)(其中n是节点号)为每个进程启动一个单独的进程(PID)
pids=Enum.map(1..totalnodes,fn->
{:ok,unit}=GenSerModule.start_link(n)
单元
(完)
PID从此行返回(,等等)
现在我想在一个主管下启动节点。也就是说,我必须通过每个节点的Supervisor的init函数启动genserver进程,并获得PID。类
我需要从Postschema中选择包含10多个字段的特定字段。
我还需要选择预加载的:comments。我该怎么做
query = from p in Post, preload: [:comments], select: map(p, [:comments, :title])
Repo.all(query)
实现这一点的方法有多种,具体取决于您希望作为输出接收的数据结构类型。如果希望%Post{}结构只包含注释和标题字段,请使用以下查询:
query = from p in Post, pr
我在看一些长生不老药代码,看起来像这样:
@to_preload [
:last_modified_by,
change_request: [application: [:app_definition]],
comments: [:user]
]
def preload(query) do
preload(query, ^@to_preload)
end
我相信调用preload(query,^@to_preload)实际上是对宏的调用,因为文
在某些情况下,我需要通过EXTO将同一结构的两个对象插入到数据库中,因此的inserted\u在或updated\u在的
我依次插入两个struct对象,一个接一个,它们在处插入的和在处更新的结果是相同的。而我希望第二个对象在处插入_,在处更新_,时间比第一个对象长1秒,这样以后当我从数据库检索它们并在页面上显示时,数据将更有意义
向第二个对象的changeset结构提供inserted\u at或updated\u at+1秒的changeset\u没有帮助,因为它们被EXTO忽略,并且两个对
我想生成从1到6(1,2,3,4,5,6)的所有可能的整数列表(长度为5),其中按顺序至少有4个整数
例如:
[6,1,2,3,4] -> 1,2,3,4 are in sequential order
[1,3,4,5,6] -> 3,4,5,6 are in sequential order
[2,3,4,5,1] -> 2,3,4,5 are in sequential order
[1,2,3,4,5] -> 1,2,3,4 and 2,3,4,5 ar
我正在尝试用Phoenix LiveView构建一个实时股票视图。
我得到了新的数据,它也在我的数据库中得到了更新。
问题是,当有10只股票,其中一只得到更新时,只会显示更新后的股票。下面是相关的代码片段。我正在使用PubSub系统发送/接收事件
@impl true
def mount(_params, _session, socket) do
if connected?(socket), do: Stockview.subscribe()
{:ok, assign(so
我对长生不老药还是新手。我正在尝试创建一个方法,该方法接受请求列表并处理每个请求。如果全部通过,则返回{:确定,“成功”};如果失败,则返回{:错误,错误原因}
在其他语言中,我可以这样做。假设流程函数返回{:ok,“success”}或{:error,error\u reason}
def func(请求):
对于请求中的请求:
如果{:error,error\u reason}我将使用递归:
def func([head | tail])do
案例处理(head)do
{:错误,原因}->{
我有一个由函数make_struct返回的结构,如下所示:
%Example.Struct{example: 1, example_again: 2}
i、 e.不是像:[%Example…]这样的括号,至少我认为它会像上面那样返回,但函数在GenServer模块中,有时我会注意到我的函数会返回列表中的值,原因我不明白
我想返回这些结构的列表:
def foo(data_as_a_list) do
my_list = []
for entry <- data_as_a_lis
上一页 1 2 ...
39 40 41 42 43 44 45 ...
下一页 最后一页 共 125 页