我正在向Elixir库中添加规范信息,但我注意到,当我在另一个IEx会话中重新加载库时,它没有接收到我添加的“@spec”更改。我的问题是,当我们
r(Module)
在IEx中,重新加载的到底是什么?这是一个很好的问题
当我们在IEx中重新加载模块时,我们重新编译模块源代码,将其内容重新加载到内存中。磁盘中的原始.beam文件,可能是模块的第一个定义的来源,根本没有改变
由于TypeSpec和文档是从.beam文件加载的(它们不随模块一起加载到内存中,因为它们不需要在内存中),因此在重新加
我试图利用postgres返回纯json的特性,因此我在我的Ecto模型中添加了一个方法,该方法执行一个查询,返回想要的json
defmodule BoardApi.Board do
use Ecto.Model
def json_by_id(id) do
sql = "SELECT row_to_json(json) AS result FROM (SELECT array_agg(users) AS users FROM users WHERE id=#{id}) jso
有没有办法在不显式使用preload:的情况下预加载EXTO关联
类似于模式中的选项
schema "gadgets" do
field :foo,
has_many :bars, Myapp.Bar, preload: true
end
我在做类似的事情
Repo.get(Gadget, id)
|> Repo.preload: [:bars]
编辑:我尝试这样做的原因是因为我想将相关模型预加载到已经预加载的相关模型,如
preload: [:invoices prel
与定制Phoenix框架提供的模板不同,我希望创建一组自己的模板,并将这些模板作为定制混合任务调用
我可以创建自定义混合任务,但无法确定:
其中在phoenix框架目录结构中放置自定义模板的目录
如何修改模块Mix.Tasks.??.Gen.Html,以便Mix.Phoenix.copy_from path()。。。可以找到存储自定义模板的目录。(其中???是我的定制名称的字符串。这是我重命名的Mix.Tasks.Phoenix.Gen.Html模块的副本,可以使用未修改的代码成功运行,并成功找
我正在绞尽脑汁创作一套长生不老药的排列
Permuate([1,2,3])
[[1, 2, 3], [1, 3, 2], [2, 3, 1], [2, 1, 3], [3, 2, 1], [3, 1, 2]]
然而,我的每一次尝试最终都会得到一些类似的版本:
[[2, [3, [1]], [1, [3]]], [3, [2, [1]], [1, [2]]], [1, [2, [3]], [3, [2]]]]
或
就快到了。。只是需要一些关于用长生不老药构建列表的启示
我的代码如下所示:
de
在最新的凤凰城编程书中,Chris McCord谈到了使用字符串和原子键作为控制器动作参数:
在控制器中的世界操作中,外部参数具有字符串键,“name”=>name,而内部使用name:name。这是整个凤凰城的一个惯例。外部数据是不安全的,因此我们显式地匹配字符串键,然后我们的应用程序边界(如控制器和通道)将它们转换为atoms键,我们将依赖于Phoenix内部的其他任何地方
但是,我不清楚为什么使用字符串密钥比原子密钥更安全。为什么字符串键在这里更安全?默认情况下,Erlang VM中的最大
我刚刚学习了ETS和GenServer,我正在尝试在我的应用程序启动时初始化缓存。很有可能是我设计的不正确导致了我在下面描述的问题,所以任何关于这方面的反馈都会很有帮助
当应用程序初始化时,将通过工作者创建:ets表
def start_link do
GenServer.start_link(__MODULE__, :ok)
end
def init(:ok) do
tab = :ets.new(:my_table, [:set, :named_table])
:ets.inse
我正在尝试使用为所有phoenix模型引入审计日志记录。代码库用于管理部分。
根据whatwasit文档,我们需要向模型中的changeset方法添加一个额外的参数,并使用这个可选的第三个参数调用prepare\u version。这样,当保存模型时(使用iex测试),我就能够在versions表中生成一个版本
但是,似乎没有这样一个例子,资源控制器(来自ex_admin)允许钩子捕获当前登录的用户,然后在定义的结构中使用该用户作为变更集方法的第三个参数传入。
我尝试在控制器块中引入before
我正在尝试使用shield构建一个Oauth2服务器(称为Oauth2srv)。但这不是问题所在。示例代码基本上说明了如何执行此操作:
scope "/", Shield do
pipe_through :api
get "/apps", AppController, :index
.. etcetera ..
end
屏蔽模块位于依赖项中,因此驻留在deps/Shield中。所有的路线都在那里。
现在,我想在我自己的模块中向控制器添加一条路由,如下所示:
scope "/",
标签: Elixir
phoenix-frameworkcode-analysiselixir-mix
在Phoenix应用程序中,我试图在每次提交分阶段文件之前自动执行Elixir代码分析,但在运行mix-credo-file1.ex-file2.exs-file3.ex时,credo似乎只考虑列表中的第一个文件
这种行为是需要的吗?是否计划支持多个文件输入?提前谢谢
长生不老药:1.4.1
信条:0.6.1
凤凰城:1.2.1
PS:我正在使用由mix credo gen.config生成的默认.credo.exs此行为是有意的(作者本人:)
这是该SO线程之后的问题:
我想只有作者才能回答“
标签: Elixir
elixir-mixelixir-iex
我知道,当您运行像IEx-smix这样的应用程序时,可以使用IEx.pry获得断点
我正在做一些不使用混合的长生不老药练习。我使用elixir myfile.exs运行它
如何使用IEx运行此文件,以便在应用程序中使用IEx.pry断点
编辑:以下是文件:
# hello_world.exs
defmodule HelloWorld do
@doc """
Greets the user by name, or by saying "Hello, World!"
if no name
刚开始学习Elixir/Phoenix,我不明白为什么在Plug.Conn.put_resp_header/3中会出现这样的无函数子句匹配错误
这是我的密码:
def index(conn, params) do
page = Todo |> Repo.paginate(params)
conn
|> put_status(:ok)
|> put_resp_header("x-total-count", page.total_entries
这是我第一次使用命令:
$ mix deps.get
这就是输出:
Could not find Hex, which is needed to build dependency :ecto
Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] Y
* creating /Users/7stud/.kiex/mix/archives/elixir-1.4.1/hex-0.18.
在DynamicSupervisor模块中,我们有一个名为start\u child的函数,它注册并启动一个子项。我的问题是:以后我如何才能按名称找到特定的子进程,因为例如,进程。whereis函数只使用atom作为参数,我不想用atom命名子进程,我将它们命名为元组,例如,没有通用的解决方案。您有两个选项来管理此项
如果您的所有子模块DynamicSupervisor都是不同的模块,请使用列出子模块,并根据模块名称匹配最后一个参数
否则,您应该使用tuple为您的孩子命名,并维护自己的替代注册
我有一张地图:
allowed_lookup = %{coordinate: "15.0", id: 1}
我想使用这个映射进行一个EXTO查询,以过滤掉数据库中的一些条目
我是这样想的:
Enum.reduce(allowed_lookup, Project.Models.Grid,
fn {x,y}, query ->
IO.puts "#{inspect x} , #{inspect y}"
如果您的OTP层次结构设计不正确,您会在生产中看到什么样的错误
假设存在一个瓶颈,您没有足够的工人和代码块,这基本上是超时错误吗
有没有办法监控您是否有瓶颈
我知道你可以写基准测试,我相信,有人能给我指出一个很好的基准测试例子吗
假设存在一个瓶颈,您没有足够的工人和代码块,这基本上是超时错误吗
在明确说明实际情况之前,人们无法为“工人不足”问题辩护。每小时有1百万名工人发送一条消息是极为低效的;每秒有1个工作进程处理1百万条消息是阻塞。没有银弹。旁注:对于这种特殊的问题,我们用来处理背压
AF
标签: Elixir
phoenix-frameworkphoenix-live-view
我在仍然测试版的库中玩得很开心。有一件事我很困惑,那就是如何确保我的LiveView在发生异常时能够以可预测和透明的方式运行
在传统的基于HTTP请求的世界中,我希望特定的请求崩溃,返回500个响应,并且可能返回一些错误页面,向用户指示“嘿,服务器有问题”。开发人员可以依靠集成,例如检测和报告异常,因此我收到一封关于错误的电子邮件,并可以在Rollbar仪表板中检查它
但是当我的LiveView代码崩溃时,我没有得到这样的保证。朗视进程将从崩溃中恢复过来(正如我所理解的),恢复到它最后一个已知的
我有一个函数,我多次调用它,我想多次调用这个函数并放入数组/列表中
def markup(element) do
{
:title, title(element)
}
end
在ruby中,我们确实喜欢这样
list = []
list << {title: 1}
list << {title: 2}
list=[]
列出与elixir中的ruby示例等效的内容:
list = []
list = [{:x, 1} | list]
我想在多个环境中为我的phoenix应用程序添加一些数据。我使用蒸馏器发布我的应用程序。我有以下更新数据的想法:
在RelaseTasks中编写更新数据的方法,并在rel/commands中创建shell脚本
这是酿酒厂推荐的运行任务的方法,但它似乎适用于长寿命任务。如果一次性任务转到此处,则ReleaseTasks文件将变得越来越大
编写一个方法来更新任何文件中的数据,并通过远程控制台运行它
手动更新数据库
有人有好主意吗
干杯我认为要做到这一点,您需要添加迁移文件以更新数据。您可以在生产环境
标签: Elixir
rethinkdbflash-messagephoenix-framework
我试图通过一条Flash消息在Phoenix框架中获得对我的数据库的查询的成功或失败。但是,我不知道从代码块中的RejectDB检索结果消息的正确签名
def index(conn, _params) do
#Query that creates a table in the database
table_create("contentText")
|> Basedados.Database.run
# List all elements of a tab
标签: Elixir
phoenix-frameworkecto
我正在尝试在复制的专用池模式下工作。他们的论坛上没有回应,因此这里有一个问题。此外,这个问题纯粹是一个技术错误
Hyperledger使用Phoenix、Cowboy、Elixir、Ecto、Erlang、Postgre SQL、Node.js等。主节点处理请求,在两个表中插入一行,并向辅助节点广播消息。辅助节点执行类似的操作,并将消息发送回主节点以继续处理。问题就从这里开始。主节点现在尝试读取它先前插入的行,但得到的结果是nil。此后将引发以下异常
** (exit) an exception
通常在Elixir中,我可以使用pin运算符指定绑定到现有名称的值,即:
a = 1
{^a, b} = {1,2}
# b is now 2
一切正常
但是,我似乎无法将这样的值固定在闭包函数头中,即:
a = 1
f = fn
^a -> true
_ -> false
end
导致编译失败:
**(CompileError)iex:2:未绑定变量^a
这有什么原因吗?有没有正确的方法来达到同样的效果
感谢上述问题的解决方法似乎是在闭包中使用case语句,尽管它感觉不
谁能给我解释一下关于Elixir数据类型的一些事情:
1) 这些设备是什么?我应该在什么时候使用它们
2) HashSet和MapSet之间有什么区别
3) 什么是HashDictHashDict以及我应该在什么时候使用它
当需要严格强制每个元素只能出现一次时,请使用集合。它们是非常罕见的,我不会打扰它们,直到你遇到一个特定的问题,它们是有用的
区别在于底层实现。使用最新的Erlang VM R18,MapSet速度更快:
HashDict已弃用,不应在新项目中使用,另请参见
如果出于某种原因使
当我想用Elixir编写一个简单的hello world程序时,它不会编译。我也不能用“c”hello.exs“加载它。
它总是给我这个错误:
** (CompileError) hello.exs: internal error in expand_module;
crash reason: undef
in function erl_parse:new_anno/1
called as erl_parse:new_anno({function,0,module_info,0
为了理解Elixir是如何实现Enum.reduce的,我将它插入了一个puts以观察输出。我不清楚为什么它首先执行第二个列表元素,而不是第一个,然后独立地执行所有其他元素
iex (30)> Enum.reduce([1,2,3,4], &(IO.puts("a#{&1} b#{&2}")))
a2 b1
a3 bok
a4 bok
(a和b只是为了确认订单)
从源头上看,我认为它可以转化为
:lists.foldl(&IO.puts("a#{&
当我在玩这里找到的Phoenix starter示例时,我遇到了这个错误,我在调试时遇到了困难
Compiled web/connection.ex
[info] OPTIONS /api/v1/current_user
[info] Sent 204 in 74µs
Compiled web/connection.ex
[info] GET /api/v1/current_user
[info] Sent 500 in 23ms
[error] #PID<0.418.0> runn
选项restart::transient似乎没有任何效果
我有几个任务Task.async(fn(x)->fetch_info(x)end,它们发出http请求以获取多个资源,并且有超时错误。最好重试那些失败的任务,而不是使用try,rescue
我认为async\u nolink是我在不破坏流程的情况下得到的最接近的方法。如果无法使用任务,我们是否有一种更简单的方法,使用主管,在完成任务后启动存在的多个流程,并在失败时重新启动它们?我不认为任务是实现您想要的最佳选择.文件中说:
此模块定义了一
我有一个类似Twitter的关注者设置,用户可以通过连接模型相互关注。在usershow上,我想显示最新的5个追随者和追随者。由于不知道给定用户有多少个连接,我想将Repo.preload限制为最新的5个
我正在努力用我应该使用的方法,我应该只加载最新插入的连接模型5的追随者和追随者连接_在。什么是最干净、最高效的方式
web/controllers/user_controller.ex
[...]
def showconn,%{id=>id}do
使用者=
回购,快!用户,id
|>回购预加载
我想创建一个可以在Phoenix应用程序中使用的变量,即全局变量。它不是一个设置静态变量,而是在项目启动一次时进行计算,每次项目重新启动时,都会再次计算该变量。如何创建它 您需要使用其他机制来实现该目的,例如:
有状态长时间运行的进程(您可以查看GenServer/Agent
ETS(Erlang术语存储)
希望提供帮助计算此值是否需要访问数据库?您可能需要查看使用代理来保留此值-
我正在尝试在伞下建立一个应用程序来处理业务逻辑。它使用EXTO与数据库交互。我在设置SQL.Sandbox进行测试时遇到问题。无论何时运行测试,都会出现以下错误:
$ MIX_ENV=test mix test
** (exit) exited in: GenServer.call(Domain.Repo.Pool, :checkin, 5000)
** (EXIT) no process
(elixir) lib/gen_server.ex:596: GenServer.call/3
我试图将登录功能作为本书的一部分来实现,但遇到了以下问题:
== Compilation error on file web/controllers/user_controller.ex ==
** (CompileError) web/controllers/user_controller.ex:39: undefined
function page_path/2
(stdlib) lists.erl:1338: :lists.foreach/2
(stdlib)
我有一个与many\u-to\u-many关联的外胚层模型。我通过put\u assoc将两个关联模型放入变更集中,并希望验证关联模型的数量。我该怎么做?示例模型:
defmodule Content do
use MyApp.Web, :model
many_to_many :topics, MyApp.Topic,
join_through: MyApp.ContentTopic,
on_replace: :delete
def changeset(struc
我需要将今天+1天存储在一个exto.DateTime变量中,以便存储在数据库中,但就我的一生而言,我找不到如何做到这一点。Timex库在Elixir中很流行,在旧版本中,我发现了一个Timex.Date.add(),但在当前版本中已经没有了 使用timex3.0,您可以使用timex.add/2和timex.Duration.from_days/1:
iex(1)> Ecto.DateTime.utc
#Ecto.DateTime<2016-12-25 14:47:07>
i
标签: Elixir
phoenix-frameworkphoenix-channels
我使用子主题作为一个用户通道,其他人可以使用它向特定的其他人发送消息
例如:
-我是用户1,我想向用户2发送一条消息。
-我在App.Endpoint.broadcast(用户:2,您好)中发送一条有效载荷为{to:2的消息:'hi'}和handle_
下面是我的用户\u channel.ex中的一个片段:
def handle_in("chat", incoming_payload, socket) do
from_uid = socket.assigns.uid
uid = inco
我正在尝试扫描一个给定的目录,只需要接收回的目录。这种方式返回给定目录中的所有文件和文件夹:
dir = "/Users/user/releases/"
folders =
File.ls(dir)
|> elem(1)
是否可以过滤文件夹以仅保留目录而不保留单个文件?谢谢 您可以使用File.dir?/1过滤文件/目录列表,以仅返回目录。因为File.ls/1只返回文件名,而不是完整路径,在将文件名传递到file.dir之前,您还需要将文件名加入dir:
iex(1)
如何在终端文件中编译成可执行的长生不老药文件
我读到要编译elixir,我需要创建一个新项目。
但我要编译的文件是
IO.puts“hello world”要从shell编译,首先创建一个文件:
# module_name.ex
defmodule ModuleName do
def hello do
IO.puts "Hello World"
end
end
然后运行shell并编译:
Interactive Elixir
iex> c("module_name.ex"
在这个函数中,我需要先检查price变量是0还是nil,然后再通过执行priceFloat=price/1将其转换为float,否则会出现算术错误
def insert_product_shop(conn, product_id, shop_id, price) do
IO.inspect(price, label: "price")
priceFloat = price / 1
changeset = Api.ProductShop.changeset(%Api.
我有一个模块,看起来像这样:
defmodule Othello.Game do
alias Othello.Game, as: Game
alias Othello.Utils, as: Utils
defstruct enabled_spaces: Utils.gen_list(Game.width() * Game.width(), fn _ -> false end),
is_game_over: false,
is_f
如何将Sec WebSocket协议设置为phoenix WebSocket中的响应头
我曾尝试将header字段添加到conn对象中,但它似乎已经被删除了。
我尝试的另一个选项是通过导入Phoenix.Transport.websocket来创建自定义websocket,但没有成功。Phoenix正在对此进行支持,请参阅pull request。如果你真的需要尝试,考虑樱桃摘在你的凤凰尖顶上的补丁,或者直接从PR作者的分支使用凤凰。
如果标头是由客户端传递的,则将对其进行设置。根据添加的文档:
我有这样一个列表:
[
["5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42", "1538077790705827"],
["5b71d7e458c37fa04a7ce768","5b3f77502dfe0deeb8912b42","1538078530667847"],
["5b71d7e458c37fa04a7ce768","5b3f77502dfe0deeb8912b42","15380777783909
我正在阅读《凤凰城编程》一书,在第60页添加了/Users/newroute之后,我的路由器似乎已经停止正常工作
当我尝试导航到我得到的任何/用户路径时
找不到GET/Users Rumbl.Router的路由
我的router.ex文件如下所示:
defmodule Rumbl.Router do
use Rumbl.Web, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_sessio
最新版本的Elixir(1.7.X)有一个
现在,我知道以前的一些版本没有这个问题,但我不知道是哪个版本
我试过的
我已经测试了以下构建:
1.7.2-otp-21
1.7.3-otp-21
1.7.4-otp-21
所有这些都不能正常工作
该错误可通过MWE复制:
问题:
什么是elixir otp erlang的最新版本不受此bug影响?我编写了一个脚本(使用docker官方图像)对所有1.7版本进行测试,但所有版本都失败了
最新的有效版本似乎是1.6.6
root@0697cad2
在不使用EXTO enum库的情况下,还有哪些方法可以与数据库中类似于enum的整数值进行匹配
例如,在我的模式中,我有以下字段:
field :account_status, :integer
因此,在我的函数中,我想知道整数值1,2,3的含义:
1 = VALID
2 = PENDING_CONFIRMATION
3 = CANCELLED
我有什么选择
我能想到的是:
def is_valid?(account)
account.account_status == 1
end
可
我有以下表格:
schema "project_users" do
belongs_to(:user, MyApp.User)
end
及
我想在查询与is有归属关系的用户之后,根据搜索向量结果查询项目用户
我对用户进行了以下查询。我想知道如何将其与项目用户联系起来:
def query_all_users(params \\ %{}, preload \\ []) do
query = from(u in User, preload: ^preload)
query_by(qu
我正在尝试使用IO读取输入。read:stdio,:逐行读取,我能够在终端中输入,但在提供输入后无法退出
defmodule SumOfTwo do
def main() do
IO.read(:stdio, :all)
|> String.split()
|> Enum.reduce(fn x, acc -> String.to_integer(acc) + String.to_integer(x) end)
|> IO.puts()
我已经开始了很多项目,但我总是觉得正确定义很有挑战性。我经常在上下文中创建“子上下文”,我认为这很好,但从来都不是完美的
我的问题是人们有什么技巧来定义凤凰城的环境?或者某种石蕊测试来确定环境之间的界限
例如:
我有一个与Slack的API集成的应用程序,使用Google的Map API查找时区/位置信息,并使用Stripe进行支付
我从松弛上下文开始,但很快发现我将松弛API逻辑与我的应用程序的实际业务逻辑混合在一起
我把所有谷歌地图的东西都放在谷歌上下文中
我把所有条纹的东西都放在付款环境
当使用EXTO进行数据库查询时,我们将使用类似于Users.Repo.get!(id),这当然有效,但为什么我不需要发送/接收来与用户进行通信。Repo过程?为什么我可以简单地称之为引用模块和函数名
Users是一个OTP应用程序,其中Users.Application将Users.Repo进程作为子进程加载到Users.Supervisor进程中
...
def start(_type, _args) do
children = [
Users.Repo,
标签: Elixir
phoenix-frameworkelixir-mix
我目前正在努力使我的测试顺利运行,我正在努力使设置正确
有:
属于“用户”和“项目”的“工作项”
我不知道如何创建一个可以与具有正确关系的设置[:work\u item]一起使用的夹具
@create_attrs %{
comment: "some comment",
date: ~D[2010-04-17],
duration_in_minutes: 42,
hourly_rate_in_cents: 42,
project_id:
我从一个端点获取数据作为一个列表,假设它们是唯一的id,我尝试为它们中的每一个启动GenServer进程,但进程一旦启动就会终止,但错误不清楚,我似乎无法找到杀死进程的原因,下面是我的示例代码和尝试调试的错误。注意(“但是,我可以用一个事务启动一个进程”,当我使用id调用Enum.each()并尝试在命令行中启动GenServer时,它会成功运行)。当列表来自端点时,会发生什么情况?因为可以清楚地打印列表,并且进程成功启动,但它们也立即终止
def new(conn, %{"hashe
我有一个伞形应用程序,它使用prod.exs、dev.exs和config.exs文件定义一些环境变量
在prod.exs和dev.exs中定义的所有内容都可以使用Application.get_env/2读取,但是当我在config.exs中定义变量时,函数返回nil
下面是我的config.exs文件的外观:
import Config
config :my_umbrella_app, MyModule.Scheduler,
timezone: "Etc/UTC",
上一页 1 2 ...
38 39 40 41 42 43 44 ...
下一页 最后一页 共 125 页