标签: Elixir
phoenix-frameworkectochangeset
您好:)我在尝试使用表单插入数据时遇到了一个小问题
当我插入时,重定向工作,但出现任何错误消息
我的控制器看起来像:
defmodule HexProjectWeb.UserController do
use HexProjectWeb, :controller
import Ecto.Query
alias HexProject.Accounts
alias HexProject.Accounts.User
alias HexProject.Gender
def
我在下面试过:
iex7>String.split hello world |>String.upcase |>Enum.join//
我得到了这个:
** (Protocol.UndefinedError) protocol Enumerable not implemented for "HELLO WORLD"
(elixir) lib/enum.ex:1: Enumerable.impl_for!/1
(elixir) lib/enum.ex:112: Enumerable.reduce/
为什么这样做有效:
iex(9)>Enum.filter([“lowks”、“kian”、“seong”],fn(x)->x==“lowks”end)
[“lowks”]
但这并不是:
iex(5)>Enum.filter(String.split(“low kian seong”),fn(x)->x==“lowks”end)
[]
是因为我正在过滤函数吗?除非我遗漏了什么,否则在第二个示例中,您的输入有误。它应该是低的而不是低的
因为它看起来漂亮多了:“lowks kian seong”|>S
我有一个相当大的函数“管道”来处理输入流。
在管道启动之前,将创建一个“环境”映射,该映射将提供额外的
有关管道中函数的信息。我现在所做的,似乎
Elixir所要求的是将环境显式地传递到每个函数中
我对需求的可读性感到有点不安,因为
管道(以及它们调用的许多函数)需要环境作为参数。
另一方面,我当然明白这可能只是“做它”的一部分
在功能上”
我的问题是:我是否遗漏了处理这个问题的一些东西,也许是一个习语,
或者我应该习惯于把“额外”的论点作为
函数式编程世界
谢谢。我建议为此使用代理。以下内容完
在我的测试中,我用json为每个路由点击路由器,Plug.parser只接受json。这很好,除了使用delete方法的测试外,该方法总是失败,因为不支持的内容类型为multipart/mixed。我正在发送一个带有delete请求的空正文,在标题中使用我的application/json作为内容类型,但我认为_method参数导致它被拒绝为错误的内容类型-尽管这不会发生在put方法中,该方法也需要将_方法添加到请求正文中
test "inactivate" do
{id, token} =
标签: Elixir
otperlang-supervisor
我真的在和长生不老药的管理者搏斗,想知道如何给他们命名,这样我就可以使用他们了。基本上,我只是尝试启动一个受监督的任务,我可以向它发送消息
因此,我有以下几点:
defmodule Run.Command do
def start_link do
Task.start_link(fn ->
receive do
{:run, cmd} -> System.cmd(cmd, [])
end
end)
end
end
de
我正试图找到与rails相当的Phoenix“params[:controller],以便根据呈现视图的控制器提供样式表和javascript文件
在Rails中,您可以简单地执行以下操作:
<%= stylesheet_link_tag 'application', params[:controller] %>
<%= javascript_include_tag 'application', params[:controller] %>
资料来源:
我
我想添加一个助手模块来使用
但是当我将defmodule放入
/lib/Shopper/CallApi.ex
和在中使用
/web.ex
结束
编译器因错误而失败
== Compilation error on file web/controllers/page_controller.ex ==
** (UndefinedFunctionError) undefined function: Shopper.CallApi.__using__/1
Shopper.CallApi.__us
我正在创建一个包含一些混合任务的长生不老药库。库被指定为:my_app a Phoenix app的依赖项。在库的混合任务中,我希望能够调用MyApp.Repo.all,但是我得到一个错误,错误是:*UndefinedFunctionErrorUndefinedFunction:MyApp.Repo.all/1模块MyApp.Repo不可用如何在不指定:my_app作为依赖项的情况下加载MyApp.Repo模块?您的模块中有这两种设置吗
use Ecto.Model
import Ecto.Qu
我需要为我的项目创建一个等价的main函数。我需要添加一些依赖项到项目中,并使用它们来运行单个函数。我真的不需要OTP应用程序,所以我认为这样定义它(有主管和所有东西)太过分了
我做了一个测试,把它放在mix.ex中,就像这样,它工作了
def application do
MyModule.main
[applications: [:logger]]
end
但感觉不自然。有没有更标准的方法
编辑:
将其放入应用程序中仅在它出于某种原因第一次编译时才起作用。在您的mix中添加mod
试图了解Plug,特别是Plug.Router。来自文档()。根据规范,插件有一个init函数,该函数在初始化时被调用以传入选项,但这些选项在定义的路由中似乎不可用
没有可用选项的原因是什么?是否有一种模式允许它存在?这是《编程凤凰》一书的摘录:
“有时候,你可能需要菲尼克斯做一些繁重的工作来改变你的选择。这就是init函数的工作初始化在编译时发生。Plug将使用init的结果作为要调用的第二个参数。因为init经常在编译时调用,所以它是验证选项和准备一些工作的最佳场所。这样,通话速度就可以尽可
Elixir属于函数式编程语言家族,因此可以安全地说,输入函数的所有内容都会得到输出
现在考虑模块过程中的函数。
作为参数,它需要pid、name和返回true(一个原子),如果一切正常的话
pid将保存在哪里?如果erlang将PID保存到变量(映射、键列表)中,则存在共享状态内存,并且在函数编程中禁止将变量保存到共享内存中 我认为你的假设是错误的。对于函数的每个参数,都有相应的输出,这是毫无疑问的。这不是功能性的,也不是命令性的
也就是说,我认为pid和名称之间的关联存储在Erlang全局进
考虑以下模块
defmodule Parse do
def number([ ?- | tail ]), do: _number_digits(tail, 0) * -1
def number([ ?+ | tail ]), do: _number_digits(tail, 0)
def number(str), do: _number_digits(str, 0)
defp _number_digits([], value), do: value
d
标签: Elixir
phoenix-frameworkecto
我的Phoenix应用程序中有一个Post model/view/controller/templates,模式如下:
schema "posts" do
field :title, :string
field :content, :string
field :published, :boolean
belongs_to :user, MyApp.User
timestamps
end
目前在web/controllers/post_contr
我需要将用户上传的图像存储在服务器上。我不考虑使用Amazon S3,而是将它们保存在我的菲尼克斯应用程序托管的同一个服务器上。
建议将它们存放在哪里?我不知道Elixir/Phoenix社区已经确定了一个标准的上传目录。如果您计划将图像返回给最终用户,您可能希望将它们放在web/static/assets/images目录中,但我不知道是否有明确的约定
你可能会发现凤凰城的文档对这个主题有很好的阅读价值。那么,如果你不知道,为什么要回答呢?即使我不知道你的问题的确切答案,我想我还是可以通过发布
标签: Elixir
phoenix-frameworkecto
尽管我将查询传递到存储库,但灵感来自以下方面:
teams_users = Repo.all (from(t in Team, where: t.owner_id == ^user_id))
|> Enum.each( &team_users/1 )
def team_users (team) do
%{id: id} = team
Repo.all (from(tu in TeamUser, where: tu.team_id == ^id))
end
我编写了这个测试用例:
assert_raise ArgumentError, myFn(a,b)
但它并没有以我所期望的方式进行评估myFn引发ArgumentError(do:raiseArgumentError),但它未被assert\u raise捕获
文档中的示例运行良好:
assert_raise ArithmeticError, fn ->
1 + "test"
end
从文件中:
assert\u raise(异常,函数)
断言在执行函数期间引发异常。返回解救的异常
标签: Elixir
phoenix-frameworkecto
当一个新用户注册时,我希望在默认情况下给他一个gravatar配置文件映像,之后他应该能够手动设置它,因此只有当profile\u img\u url为nil时,变更集方法才应该应用
def changeset(model, params \\ :empty) do
model
|> cast(...)
...
|> get_gravatar
end
defp get_gravatar(current_changeset) do
case current_cha
标签: Elixir
phoenix-frameworkecto
我需要在数据库中执行更新并返回一个值。这可以使用中的返回关键字来实现
由于这是不支持的外特我想我必须使用一个,但我不知道如何做到这一点。这就是我所拥有的:
query = from(v in MyModel,
where: v.id == ^instance_id,
update: [
inc: [counter: 1],
]
)
我想在更新后返回一些字段,例如计数器和id,因此我需要添加到查询中:返回id,计数器 如果您使用exto.Repo.update\u all有一个
我正在尝试生成需要爬网的URL地图
上面的代码正在为我生成字符串映射。我想把它展平成一个简单的字符串映射
如何在Elixir中实现这一点?使用Enum.flat\u map/2
category_urls = [
"https://thepiratebay.org/browse/100/0/3",
"https://thepiratebay.org/browse/200/0/3",
"https://thepiratebay.org/browse/300/0/3",
"https
在我的项目中,我正在做下面写的事情。但我只想在生产模式下运行它,而不是在开发模式下运行,为此,我尝试了Mix.env,它通过给我:dev或:prod在本地运行,但在在线API上不起作用。它得到了一个错误,因为没有什么比env更好的了
我想让它只是为了生产某种模式匹配功能
Task.start(fn ->
if user |> Intercom.get_user |> intercom_user? do
Logger.info "User '#{user.
我安装了rollbax软件包,它提供了通过rollbax.Logger模块记录输出的功能。问题是,我希望将level::info用于默认的elixir:console记录器,将level::error用于Rollbax.logger
我该怎么做?在config/config.exs中:
config :logger, :console, format: "[$level] $message\n", level: :info
在应用程序中的某个地方:
Rollbax.Logger.configu
我正在寻找一种测试套接字是否终止的方法。测试中的代码执行以下操作:
def handle_in("logout", _payload, socket) do
{:stop, :logout, socket |> assign(:user, nil)}
end
test "logout terminates the socket", %{socket: socket} do
try do
push socket, "logout"
catch
huh ->
我有一个函数render\u upvows/1,它可以呈现一个字符串。我努力寻找最好的方式来表达它的代码明智。以下两个版本具有相同的功能。哪一种编码风格更好?为什么?有没有更好的第三种解决方法
版本1
版本2
通过删除不必要的元组,可以简化第一个示例:
def render_upvotes(number) do
case number do
1 ->
'1 upvote'
number when is_integer(number) ->
标签: Elixir
phoenix-frameworkcowboyelixir-poison
有没有一种方法可以在某个特定的结构被毒药编码之前将HTTP状态置于该结构中
我想更一般的问题是,我能否在编码器的encode功能级别访问conn?我正在尝试构建一个类似于此处指定内容的API:
在我的控制器函数中,我有这样一个功能,它在请求发出之前透明地显示HTTP状态。但是,如果某个插件修改了管道中的HTTP状态,那么我在创建ApiMessage期间设置的任何状态也需要更新
conn |> put_status(:forbidden) |> json(%ApiMessage{ st
正如长生不老药所说:
…访问透明地忽略零值:
对我来说,这似乎很容易出错。我宁愿看到nil[key]失败,也不愿返回nil
我很确定语言开发人员选择走这条路有很好的理由。这是什么原因 nil不实现Access行为(nil是atom FWIW。)
发生的情况是:Access.fetch(nil,无论什么)返回:error和get作为第三个参数传递给Access.get/3
“为什么”这个问题最好向José提出,我唯一能想到的是:如果是深层嵌套结构,这种行为会简化代码
此外,这是第一级地图访问的默
我试图使用一个进程作为一种同步机制,在这个机制中,它可以接收我们的订单信息,但仍然可以正常工作。我已经设法用普通流程实现了问题的简化版本,但在GenServer上无法达到同样的效果
简化版如下:
defmodule Fun do
def start_link do
spawn(fn -> loop(:initiated) end)
end
def loop(state) do
receive do
:join when state == :init
我有一个带有sitemap.xml的应用程序。我需要每天动态修改一次。我知道如何为它生成内容。但是,我如何用新生成的sitempa.xml替换(!)我当前的sitempa.xml,或者更确切地说替换它的内容呢?
如果它是一个rails应用程序,我只会替换它的内容,它会工作,但对于phoenix它是不同的
我提供sitemap.xml的代码是标准代码:
defmodule MyApp.Endpoint do
# ................
# Serve at "/" the st
何时在Elixir中使用匿名函数而不是命名函数
例如,我有以下代码片段:
handle_open = fn
{:ok, :done} -> "OK"
{:error, _} -> "Error:"
end
handle_open.(ExAws.S3.download_file("#{Application.get_env(:ex_aws, :s3)[:bucket_s3]}", "foo.jpg", "../../public") |> ExAws.request);
在本例
我正在尝试编写一个简单的模块函数,它将表达式作为字符串,如“123+45”,并返回一个答案。因此:
Calculator.calculate("123 + 45")
# => 168
我想只需拆分(“”)上的字符串以获得整数和运算符,然后基本上对其调用code.eval\u string。这是我第一次天真的尝试:
defmodule Calculator do
def calculate(str) do
[x, oper, y] = String.split(str, " "
标签: Elixir
erlang-supervisorex-unit
我试图在Elixir项目中模拟单独的单元测试和集成测试。对于单元测试,我不需要运行监督树,因此理想情况下,我希望使用类似模块标记的东西,即@moduletag:integration,它将需要运行应用程序的测试分组。我可以手动运行测试两次:
mix test --no-start --only integration:false
mix test --only integration:true
但是我更喜欢一些集成的解决方案,这样我就只需要运行混合测试。对于ExUnit.configure/s
我用Mox模拟HTTP调用(使用Tesla),如下所示:
test "Token expiry is handled by re-applying for a token on the fly", %{conn: conn} do
TeslaMock
|> expect(:call, 8, fn env, _opts ->
case env.url do
"http://fake.server.com/v1/token" ->
我正在使用Phoenix成功调用一个API。但我很难接受回应,并以我喜欢的方式展示它。以下是我的原始回答:
答复:
模板
控制器:
堆栈跟踪错误:
我如何获取响应并在视图中显示我想要的内容
我想反复浏览比赛,并返回给定夜晚比赛的球队名称。@schedule这是一张地图,而不是列表。如果您想打印每个游戏的信息,您应该迭代@schedule[“games”]。以下是如何在一个内打印主客场球队的姓名,分为两个:
你能发布游戏时间表的代码吗?获取时间表和包括堆栈跟踪在内的完整错误消息吗?@Dogber
我在config/dev.secret.exs中配置了一些设置
use Mix.Config
config :rumbl, :wolfram, app_id: "someid"
当我尝试在代码的另一部分中使用它时,变量看起来是空的:
IO.puts app_id()
或者更具体地说
defp fetch_xml(query_str) do
{:ok, {_, _, body}} = :httpc.request(
String.to_char_list("http:/
我有一个GenServer,每当我在数据库中创建一个特定对象时,它都会启动
发电机服务器:
基本上,我正在安排一个函数在将来运行。这个函数可以在未来运行1小时或12小时,但我意识到,如果服务器出于任何原因关闭,那么这个函数的计时现在可能会关闭,从而破坏整个进程
我如何用长生不老药处理这样的错误?即使服务器关闭,GenServer是否仍保持计时器运行?将下一次计划运行的时间保留在某个地方(例如在DETS,)并检查init回调中的存储。我喜欢包装,很有趣。因此,当服务器备份时,init回调将再次被
在Elixir中的列表映射中,找到与最小长度列表相关联的键的有效方法是什么。假设我有:
z = %{a: [1, 2, 3], b: [4, 5], c: [6, 7, 8, 9]}
我知道我能做到:
Enum.map z, fn {k, v} -> length(v) end
这将给我:
[3, 2, 4]
但我真正需要的只是答案,即与最小值2相关联的键,当然是:b
我将在列表的动态地图上大约每秒钟运行一次,所以我希望它尽可能高效 用长生不老药做任何事情最有效的方法是:
Enum.
我是Elixir的新手,我正在尝试创建一个简单的匿名函数,将两个原子列表连接起来
正确地说,编写的代码是:
concat = fn(x,y) -> x ++ y end
此代码也适用于其他数据类型
我的问题是,为什么下面的代码不起作用
list_concat = fn([:a,:b],[:c,:d]) -> [:a,:b,:c,:d] end
当我写入函数时,Iex不会抛出,但如果我尝试运行list\u concat,则会抛出以下内容:
> list_concat.([:t
标签: Elixir
versionphoenix-framework
我想从命令行中检查Phoenix框架版本,就像我检查Elixir(Elixir-v)我可以用
# for >= v1.3
mix phx.new --version
# for < v1.3
mix phoenix.new --version
#for>=v1.3
mix phx.new--版本
#对于
我有一个类似这种格式的结果
[
ok: {:ok,
%MyApp.Message{
account_sid: "asdsad",
api_version: "2010-04-01",
body: "hi",
direction: "outbound-api",
from: nil,
num_media: "0",
num_segments: "0",
sid: "asdsad",
status:
在Ruby中,如果您这样定义类或模块,则可以使用[]调用它:
class Pair
def self.[](pair_name)
...return pair by name
end
end
Elixir中是否有任何等价物允许您通过方括号(卷曲/圆括号)调用模块函数
我想为一个方法提供一个简短的别名,以避免这样的调用:
Pair.from_name(Pair_name)并执行类似于此的操作。[Pair_name]elixir AFAIK中目前没有此类功能
但是,如果您想使用较短
所以我是长生不老药的新手,但我找不到关于这方面的信息,我真的不理解这个问题
比如说:
%Restaurant{} has many %Discount{}
%Discount{} has many %PromoCode{}
工厂:
def restaurant_factory do
%Restaurant{
discounts: [
build(:discount)
]
}
end
def discount_factory do
%
我有一个结构:
defmodule Company do
defstruct [:id, :name, :active]
end
我有一个函数要求它的一个参数是这个结构:
def create(connection, %Company{id: id} = company) do
# stuff
end
有没有什么方法可以在不使用guard子句的情况下强制执行类型检查?现在我必须这样做:
def create(connection, %Company{id: id, name: nam
我正在使用一个附加了一个透析器的任务来混合。但它似乎没有任何——watch选项可以在文件更改时重新运行类型检查
有没有办法做到这一点 为什么您希望静态代码分析工具监视文件系统?有一个明确的工具,名为
您可以执行任何您想要的操作,包括mix dialyzer,如第节所示。我希望这样做,可能是因为我来自JS世界,在我们开发时,运行FS watcher运行单元测试/linter/类型检查是很常见的。它比使用带有大量插件的IDE做同样的工作更有效。那我就用fswatch,它看起来很合适。所有其他观察者都
我试图找到一种直接通过bytea列插入数据的方法。我该怎么做
在我们的表中,有几个列需要加密。我们目前正在使用PostgreSQL中提供的PGCRYPTO模块。但是,在将数据插入bytea列之前,我们无法对数据进行加密
我们当前使用的方法是在重新获取列之前将未加密的数据插入到列中,然后在更新列之前使用fragment('PGP_SYM_ENCRYPT('data','AES_KEY'))对其进行加密
是否有一种方法可以在插入文件之前对其进行加密而不使用上述方法?我尝试使用excrypto模块,但
我有一种包装任何函数的行为
defmodule mydo
@回调是否运行(?:#这个意思是我不知道这里发生了什么
定义宏\uuuuuu使用\uuuu(\uu)do
报价位置::保留do
@行为我的行为
def run,do:mybehavior.run(_模块__,[]))
def run(do_run_参数),do:mybehavior.run(__模块,do_run_参数)
结束
结束
def run(模块,do_run_参数)do
是否运行\u fn=fn->
应用(模块:执行运行,执行运
标签: Elixir
phoenix-frameworkplug
我正在尝试测试一个接收类型为的连接的方法,但是我没有找到使用Plug.ConnAPI的请求参数初始化连接的方法
例如:
test“put请求参数”,%%{conn:conn}do
#将%{“foo”=>“bar”}放入连接参数
assert conn.params==%{“foo”=>“bar”}
结束
有什么方法可以在连接中设置这些参数吗?除非您在MyAppWeb.ConnCase设置中做了一些您想在此处使用的特殊操作,否则最简单的方法是使用(或者如果您没有使用Phoenix)构建一个新的c
标签: Elixir
integration-testingphoenixearly-return
我对Elixir完全不熟悉,但是当使用Node时,我们会做很多早期返回,但是我在集成测试中遇到了一些问题,无法让早期返回像代码一样工作。这是我的问题:
我的控制器中有一个接收JSON作为参数的方法,我需要验证JSON是否包含一些属性(键和类型),如果不包含,我想向客户端发送一个错误,而不需要执行该方法的其余部分。当我使用失眠症或邮递员发出请求时,这非常有效,但在我的集成测试中不起作用。即使条件为falsy,条件下的代码也会执行
这是我的方法:
def create(conn, body) do
标签: Elixir
phoenix-frameworkphoenix-live-view
假设我们通过live”/awesome“,AwesomeLive.Index,:Index从路由器渲染了LiveView
现在,为了从常规模板或控制器渲染它,我们需要使用live\u render/3
但这不起作用,因为:无法在AwesomeLive.Index上调用handle_params/3,因为它未通过router live/3宏装入或访问
如何重构处理参数/3?内部是通过phx.gen.live
@impl true
def handle_params(params, _url
我的releases.exs中有以下配置
config :botclient, MyAPP.Mailer,
adapter: Bamboo.SendGridAdapter,
api_key: System.get_env("sendgrid_key"),
hackney_opts: [
recv_timeout: :timer.minutes(1),
connect_timeout: :timer.minutes(1),
s
我如何原子化地检查和设置外部回购中的某些内容?我希望确保没有其他进程并行地更改结构的任何部分,即使两次写入没有重叠,也没有读取相同的数据
比如说,
Process A:
1. read {x=3, y=5}
2. update {x=100+3+5}
Process B:
1. read {x=3, y=5}
2. update {y=200+3+5}
这里至少有一个进程(最好是一个进程)应该失败并重试,因为它们都依赖于两个值,即使它们只更改一个值。完全按照您的要求执行。它需要迁移到有问题
上一页 1 2 ...
22 23 24 25 26 27 28 ...
下一页 最后一页 共 125 页