假设我有一个表“customers”。我想得到那张表的外键
我们可以使用model\uuuu-struct.\uu-meta从模型中获取表名`
我们还可以通过加载所有模块从表中获取模型名,并获得与表名匹配的模型模式
是否可能从表中获取外键
最好的方法是什么
如果可能的话,在外太空
谢谢。以下是如何在模型中找到每个所属的关联的外键:
schema "comments" do
belongs_to :post, MyApp.Post
belongs_to :user, MyApp.User
我正在Elixir中构建一个命令行实用程序,并将其打包为一个escript。当可执行文件退出时,我需要运行一些清理任务
我对escript的理解是,每次从stdIn接收输入时,它都会启动应用程序。应用程序在完成输入处理后应退出,这是否正确
我的应用程序确实链接了一个监控GenServer的管理器,但据我所知,每次应用程序收到来自stdIn的新输入时,它都会重新启动
根据,您可以在应用程序模块中实现stop/1回调。我正在这样做,但回叫从未触发
如何在escript应用程序中执行清理任务?OTP应
标签: Elixir
phoenix-frameworkecto
我试图在Phoenix中的一个API调用中返回一些JSON数据。我正在获取Subject的所有记录并发送它们,但是exto返回一些我不想要的额外字段
我能做些什么来:
仅获取特定属性(例如仅id和name)
不要在我的响应中获取不必要的字段(例如\uuuuuu meta\uuuuuuuu和\uuuuuuu owner\uuuuuuu)
这是我的控制器:
# Controller
def index(conn, _) do
subjects = Subject |> Repo.
标签: Elixir
phoenix-frameworkelixir-mix
在Phoenix Framework项目中包括外部存储库时,可以传递Github选项:
{:example, "~> 0.9.9", github: "somewhere/example"}
是否有类似于GEM文件中Rails约定的包含本地存储库的选项
gem 'somewhere', '0.0.2', :path => 'some/local/directory'
参数就是“路径”
与其说是凤凰城的问题,不如说是一个混合的项目问题。有关更多信息,请参阅。这肯定与mix有关,
我有一个单独的JSUI应用程序,通过Phoenix的Socket JS模块连接到Phoenix服务器
将套接字模块导入我的项目的最佳方式是什么?是否有只包含Phoenix JS模块的npm
谢谢这是要提取到npm包中的路线图,但是没有时间表
伙计们,当我有时间划分优先级时,客户机就会被提取出来。在那之前,抓紧时间
(9天前)
在提取之前,最好将其导入到项目中。该文件位于
我正在从事Elixir OTP应用程序设计。在应用程序设计方面,我有以下选择
以下是两种设计
|---supervisor
| |---handler for work #1 (GenServer)
| |--handler task (Task)
| |---handler for work #2 (GenServer)
| |--handler task (Task)
| |----handler for work #3 (GenServer)
|
简而言之,我有一个脚本,它读取一个.yaml文件以在运行时获取一些配置信息,例如要联系的URL、要使用的共享秘密、是否使用调试模式等
使用该配置的模块有一个启动函数,该函数稍后会调用循环,也会调用一个logdebug函数,该函数只在设置了调试模式时写入诊断。但让我恼火的是,每次调用这些函数时,我都必须将配置传递给它们。如果我可以调用start函数,并让它设置一些可用于模块中所有其他函数的变量,那么会容易得多。那能做到吗?我似乎找不到任何关于如何做到这一点的方法
有没有像我在这里所做的那样设置运行
标签: Elixir
phoenix-frameworkecto
我在获取要使用的默认值时遇到问题。我相信我已经设置好了,但似乎不起作用。查询时,新记录在PGAdmin中没有(没有,空白),而不是假定的0
迁移:
create table(:teachers) do
add :login, :string
add :password, :string
add :email, :string
add :role, :integer, default: 0
timestamps
end
我正在开发一个模块,它在使用时扩展了其他模块的功能。问题是,有时我想在模块定义中编写一些自定义代码,用于增强模块功能:
所以,它看起来像:
defmodule Included do
defmacro __using__(_) do
quote unquote: false do
# a lot of code
model
|> unquote(@callback)
|> another_bunch_of_things_in
我已经构建了中显示的基本聊天应用程序。现在,我想通过只回复发件人来处理某些邮件
例如,如果用户键入/who,则向他们发送(并且仅向他们发送)已连接用户的列表
我怎样才能做到这一点?在凤凰城
函数头中匹配的句柄\u需要返回如下格式的响应:{:reply,{status::atom,response::map},Socket.t}
例如:
def handle_in("new_msg", %{"body" => "/who"}, socket) do
user_list = Use
Elixir 1.3.0似乎不再显示String.strip/1和String.strip/2的文档:
iex(1)> h String.strip
No documentation for String.strip was found
当前在线文档(v1.3,Master,Stable)中也缺少这些函数,但编译器仍然可以识别这些函数:
iex(2)> String.strip(" Hallo, World! ")
"Hallo, World!"
所以我想知道这是否只是字
我的应用程序的用户应该能够上传图像等文件。我应该将这些文件保存在哪里、哪个文件夹中?我对部署Elixir/Phoenix应用程序不太熟悉,但我不想在部署应用程序时生成的输出打包文件中包含这些文件。换句话说,我不想以某种方式静态地将上传的图像和文件嵌入到我的应用程序中。那么我应该把它们存放在哪里呢?首先有两种不同的选择:
您可以将上载内容存储在本地
您可以将它们存储在外部服务上,例如AmazonS3
选择正确的选项在很大程度上取决于您的业务逻辑、用户和请求的数量以及您的部署策略(例如,Heroku
我有一个聊天应用程序,双方在进入聊天之前都必须按下“接受”。顺序如下:
甲方加入该频道代理将与第三方开始链接
A的电子邮件地址作为密钥
乙方加入该频道代理
将以乙方的电子邮件地址为密钥启动链接
甲方
按接受。如果B尚未接受(代理),Agent将存储方
A的电子邮件->乙方的电子邮件->正确,否则发送消息至
甲方也已接受的乙方
乙方催收。
如果A尚未接受,代理将存储甲方的电子邮件->乙方
乙方的电子邮件->true,否则向甲方发送一条信息,告知乙方
也接受了
我现在遇到了一个错误,看起来不像
20
标签: Elixir
phoenix-frameworkecto
假定
schema "infrastructure_instances" do
belongs_to :provider, MyApp.Infrastructure.Provider
belongs_to :user, MyApp.Web.User
end
及
。。。及
schema "account_users" do
has_many :providers, MyApp.Infrastructure.Provider
has_many :instances, MyApp.I
我试图在defmacro中动态定义函数,但无法理解函数值在函数本身中不可用的原因
defmacro __using__(_) do
Enum.each ~w(public private), fn value ->
def unquote(:"make_#{value}")(user = %User{}) do
%{user | privacy: value}
end
end
end
Elixir在默认情况下将value扩展为value(),然后表示
在我的应用程序中,用户可以“导入”一张照片,服务器将图像下载到本地文件系统,将结果放入Plug.Upload,并在存储到数据库的路径之前使用Arc.exto执行一些操作。这一切在Debian中运行良好,但在我的Windows 10机器上的exto.Changeset.cast过程中失败了
File.mkdir("/tmp/import/")
filename = UUID.uuid4() <> "." <> extension
path = "/tmp/import/"
我正在创建一个聊天应用程序,我有一大堆频道信息。以下是其中之一:
def handle_in("read", %{ "chat_id" => chat_id }, socket) do
user_id = socket.assigns[:id]
ts = DateTime.utc_now
case ChatManager.mark_as_read({user_id, chat_id, ts}) do
{:ok, chat_user} ->
last_
标签: Elixir
phoenix-frameworkecto
在我的Phoenix应用程序中,我有一个函数,可以从数据库中获取一些数据,然后将其缓存在代理中。如何编写测试以确保仅在第一次请求值时才实际查询数据库?我认为最简单的测试方法是:
调用代理并存储值
修改数据库上的值
再次调用代理并期望第一个值
我认为最简单的测试方法是:
调用代理并存储值
修改数据库上的值
再次调用代理并期望第一个值
进行此操作的正确方法是使用模拟DB实例,例如,对DB查询使用
如果您使用的是exto,它会自己做;检查config/test.exs文件,查看它是否在测试中使用ex
我想创建自己的AccountCase,在其中创建一个用户和会话,并在测试中使用它。我看着ConnCase,试着这么做:
defmodule MyAppWeb.AccountHelpers do
using(opts) do
user_attrs = Keyword.get(opts, :attrs, %{login: "test@gmail.com", password: "123456", locale: "en"})
quote do
def fixture(
首先,真正的问题是:我注意到,由于拼写错误或重新命名原子,我的代码库出现了一个常见的运行时错误源,例如:
defmodule SomeGenServer do
def delayed_action do
Process.send_after(self, :delayed_action, 5_000)
end
#...snip...
def handle_info(:delayed_acton, state), do: handle_delayed_action()
我是长生不老药的初学者
我有一个应用程序在application.ex中启动一个自定义主管。代码:
defmodule MyApp do
use Application
def start(_type, _args) do
import Supervisor.Spec
children = [
supervisor(MyApp.Web.Endpoint, []),
supervisor(MyApp.Repo, []),
#my n
标签: Elixir
phoenix-frameworkgen-server
我正在尝试在Phoenix使用GenServer,将从不同客户端接收到的信息累积到一个web套接字。GenServer如下所示:
defmodule HelloWeb.Stack do
use GenServer
@name {:global, __MODULE__} # this seems to help me to prevent having to drag the pid everywhere in the application
# Client
如何从Elixir中的方法参数映射中获取单个参数
def do_something(%{"my_params" => params}) do
IO.puts "this is your param = #{my_params[param_name]}"
IO.puts "this is your param = #{my_params[:param_name]}"
IO.puts "this is your param = #{my_params.param_name}
在报告中,它说:
当发生冲突时(以前提取的记录正在更新,但该记录自提取后已被修改),将引发一个EXTO.StaleEntryError异常
在StackOverflow、GitHub和其他地方有许多关于如何修复涉及StaleEntryError的各种场景的对话。但是,对于EXTO如何知道一个结构是过时的,并没有任何解释
底层机制是什么?您链接到的exto.Changeset非常简单:
乐观锁定的工作原理是为每个记录保留一个“版本”计数器;每次修改记录时,此计数器都会递增。因此,为了使用乐观锁定,
我试图得到17位长的列表号,然后用Integer.digits将其拆分,得到这些数字的总和。不幸的是,我得到了意想不到的行为(我的结果包含一个字母串),不确定这是一个错误还是个人错误
下面是错误的iex控制台,结果显示'Q$':
iex(4)> numbers = [
...(4)> [1, 4, 8, 1, 3, 6, 9, 4, 2, 5, 5, 6, 3, 1, 8, 8, 7],
...(4)> [1,5, 9, 4, 1, 3, 2, 7],
...(4)&g
我花了很长时间试图解决这个问题,但我找到的唯一解决办法确实很难看。一定有更好的方法来解决这个问题:
给定配置
iterations = 2
tasklist = [
{:system, print: "sth"},
{:system, loop: [
{:device1, run: "cmd" },
{:device2, run: "cmd" },
], iterations: 3},
{:device3, run: "cmd" },
]
配置从上到下进行处理,
如何在JSON响应中测试键
目前我正在这样做:
assert json_response(conn, 200) == %{
"success" => true,
"errors" => []
}
现在假设我在JSON响应中有另一个键和值,如:
"user" : {id: 123, name: "john"}
我如何首先测试以确保键“user”在我的响应中。
那么,如果名称是“john”,我如何断言呢?您可以像这样拆分断言,尽管它也可以合并为一个断言
as
因此,在Elixir中的defmacro文档中,我们有(为了示例目的,我加入了hello方法):
然后,如果我尝试对可用函数进行内省,则只显示hello/0
iex(3)> MyLogic.__info__(:functions)
[hello: 0]
但呼吁:
MyLogic.unless false do
IO.puts("It works")
end
调用宏
我的理解是宏被扩展成最终的AST形式,一旦编译就没有它的踪迹。我发现有点困惑的是,似乎您可以调用,除非像函数一样,但在
我试图从关键字列表中删除某些字段。我试过了,但我卡住了。我做错了什么
[what: "country", url: "asdf", matches: "AQ"]
|> Enum.map(fn([:what, :url, :matches]) -> [:what, :url] end)
编辑:
预期产出为:
[what: "country", url: "asdf"]
我不确定这是不是最惯用的方式。您想要一个关键字列表作为输出吗
编辑:
答案是在对问题进行编辑之前发布的,所以现在不
标签: Elixir
tddphoenix-framework
我可以运行iex-SMIXPHX.server,它工作得很好:一个repl,加上热代码重新加载,再加上运行网页包
在另一个shell中,我可以运行混合测试或混合测试
但是,如何让它们在同一个shell窗口中运行,只需一个命令?因此,当我更改任何代码时,它将自动重新运行测试,同时在浏览器中显示更改
在我的应用程序配置下的config/dev.exs中,我尝试了:
...
watchers: [
mix: ["test"],
node: [...node stuff...]
]
及
在这两
我有一个这样的模型:
@schema_prefix "sqlmgr"
@derive {Phoenix.Param, key: :field_a}
@primary_key false
schema "table_a" do
field :field_a, :string, size: 30, primary_key: true
field :field_b, :string, size: 20, primary_key: true
field :fie
如果满足“某些条件”,我想将用户重定向到某个页面。例如,如果根本没有创建文章,用户必须创建文章。重定向必须从所有控制器及其操作中进行
我有一个插头:
defmodule P1 do
alias Plug.Conn
def init(opts), do: opts
def call(conn, opts) do
if some_condition do
Phoenix.Controller.redirect(conn, to: MyApp.Router.Hel
标签: Elixir
phoenix-frameworkdistilleryedeliver
我的目标是向Elixir/Phoenix应用程序添加一个新的应用程序环境变量,该应用程序随蒸馏厂发布,并随edeliver一起部署
因为我向prod.secret.exs文件添加了一个新值,所以在调用应用程序时,我希望新的env变量不是nil。在生产主机上获取\u env:my\u app,:key
相反,我得零分。我应用的修复程序是停止应用程序,删除所有内容并部署一个全新版本。我想这不是正确的解决办法
那么,如何正确添加新的配置变量呢
到目前为止我注意到了什么。我将需要的配置放入prod.se
某个数字从控制器传递到模板。例如,这个数字是5。在模板中,我需要显示从1到给定数字5的数字。
例如,在PHP中,可以这样做:
for($i=1; $i<=given_number; $i++){
echo $i;
}
不幸的是,我不知道在Elixir/Phoenix中哪种方法是最好的。非常感谢您的帮助。使用此代码,我成功地解决了问题:
<%= for x <- 1..@number do %>
<%= x %>
<% end %>
我有一张单子
extensions = [
[
%{extension: "zip", size: 3627, type: "archives"},
%{extension: "xml", size: 3627, type: "documents"}
],
[
%{extension: "png", size: 458605, type: "graphics"},
%{extension: "png", size: 458605, type: "gra
由于某些原因,我们的服务器无法连接到sftp服务器,即使该代码在本地运行时也可以工作。我还可以通过运行elixir应用程序的服务器在命令行上连接sftp
长生不老药版本:1.10.4-otp-23
connect("sftp.getevolved.com",
user: "User",
user_dir: "/etc/secrets/sftp",
rsa_pass_phrase: ssh_passphrase
标签: Elixir
phoenix-frameworkhttp-proxy
我正在使用stripity_stripe库,希望通过代理服务器向stripe发送一些请求,但不发送其他请求。因此,我尝试在一些请求上动态发送hackney选项。我查阅了stripity_stripe库的代码和文档,但找不到任何示例来发送与代理相关的hackney选项。我想在config.ex文件中设置与代理相关的信息,它可以正常工作,但由于它是在配置中设置的,因此它将应用于所有请求
config :stripity_stripe,
api_key: System.get_env("
此测试通过,但是Contract结构包含的密钥比测试中列出的多,如果没有提供所有密钥,如何使此测试失败?在中使用,而不是进行相等性检查
assert%合同{
合同:“0x3D29”,
名称:“bla”,
}=Contract.fetch(Contract:valid_address)
谢谢,但如果我没有在左侧指定一个键,测试过程将无法完成。结构不是映射,不能“遗漏”键。如果未指定,则它包含默认值并仍在模式匹配中发挥作用。您所说的“未提供”是什么意思?你的意思是nil?或者你的意思是“结构上不存在
作为一项学术练习,我正在用长生不老药建立一个工作队列。当前,我的工作人员在创建时必须手动向队列注册(请参见MyQuestion.Worker.start\u link)
我希望我的主管在创建/重新启动可用的工作人员时将其注册到队列中,因为这似乎有助于测试工作人员并最大限度地减少耦合
有没有办法做到我在下面的代码中描述的MyQuestion.Supervisor
defmodule MyQuestion.Supervisor do
use Supervisor
def start_lin
我一直在研究如何使用Enum、Stream和进行理解,我正在努力重现左外连接行为。我可以用Enum.reduce实现一个左外连接函数,但如果有办法用for实现,我宁愿使用它
我知道python支持它,我见过它,我想Elixir的理解是受到python的启发的。我们可以用长生不老药吗
假设我有两个来自外部API或某个json/xml文件的列表:
categories = [%{id: 1, name: "beverages"}, %{id: 2, name: "vegetables"}]
prod
如何剥离字符串以获得清洁7A005AFA518B?现在在init上,它返回位字符串,似乎strip对它不起作用。我曾尝试使用模式匹配从开始文本unicode“\u0002”到结束文本“\u0003”获取字符串,然后进行strip,但没有成功
str = "\u00027A005AFA518B\r\n\u0003"
String.codepoints(String.strip(str))
[<<2>>, "7", "A", "0", "0", "5", "A", "F",
设置别名时,如:
defp aliases do
[
test_run: ["run -e 'IO.puts(\"One\")'", "run -e 'IO.puts(\"Two\")'"]
]
end
混合测试运行的结果应为
$ mix test_run
One
Two
但它只执行第一个任务并打印
$ mix test_run
One
不确定这是否是故意的行为,但在提出问题之前,我想确定一下。
以下是重现错误的存储库:
Mix不允许任务运行两次。但是,您可以使
假设我正在制作一个模块,其中模式匹配是它的主要功能,比如struct或fancy case语句;有没有一种方法可以让use Module在所用模块的底部插入一个子句?这样做的原因是添加默认子句,以捕获与声明的匹配失败的匹配
举一个人为的例子:
defmodule NumberToNumber do
use SwitchLib, default: 0
# import SomeMacros
opt 1, "one"
# convert("one"), do: 1
标签: Elixir
phoenix-frameworkecto
我不确定这是否可行,但我喜欢Repo.get返回结构的事实
我试着做一些类似的事情:
Repo.get(User, id, select: [:id, :name])
def from_token("User:" <> id), do: {:ok, Repo.get(User, id,)}
例如:
Repo.one(from u in User, where: u.id == ^id, select: [u.id, u.name]
但是对于Repo.get,我无法从EXTO文档
标签: Elixir
phoenix-frameworkueberauth
在尝试为我们的项目实现ueberauth时,我们看到了一条以前从未见过的错误消息。(注意,这并非特定于ueberauth此错误将出现在任何未包含控制器“助手”的控制器中)
确切的错误消息是:
== Compilation error on file web/controllers/auth_controller.ex ==
** (CompileError) web/controllers/auth_controller.ex:4: undefined function plug/1
(
我试图用毒药对这个字符串元组进行编码:
{"product existed but could not add categories to product",
"Shop existed but could not add product to shop"}
获取此错误:
19:10:21.593 [error] #PID<0.339.0> running Api.Router terminated
Server: 192.168.20.3:4000 (http)
Request
我有一个名为insert_user的方法,它在应用程序的其他部分工作正常,但由于某些原因,在本例中它没有定义,无法找出原因
** (CompileError) test/models/user_repo_test.exs:8: undefined function insert_user/1
(stdlib) lists.erl:1338: :lists.foreach/2
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
(
我不知道如何在直接处理数据库连接的情况下使用池(没有exto)
例如:说它可以通过使用池,但举个例子会很有帮助。我认为互联网上没有这样的例子是正确的,因为这就像添加一个:
[pool: DbConnection.PoolBoy]
start\u链接中的关键字opts
因此,如果我发现问题是适配器库可能没有实现该功能
我在编译器中遇到了一个奇怪的问题——它声称我的宏没有使用,尽管我在同一个模块中调用它。它可能与在where语句中使用它有关,但最终我想这应该不是问题。有什么想法吗
defmoduledo
反宏观聚合(左、右)do
引述
片段(“合并(?)”,不引用(左),不引用(右))
结束
结束
def remove(timestamp\\Timex.now)do
模式
|>其中([p],联合(p.time,^timestamp)Repo.delete_all(返回:select_all(模式))
结束
结束
标签: Elixir
phoenix-frameworkgettext
我有一个网站本地化的问题。未翻译的模块示例如下所示:
defmodule JpWeb.SpecialistDefinitions do
import JpWeb.Gettext
@specialists_search_definition %{
schema: Jp.Profiles.Specialist,
filters: [
%{
field: :is_verified,
operation: "==",
上一页 1 2 ...
80 81 82 83 84 85 86 ...
下一页 最后一页 共 125 页