我在自动启动监督树时遇到了死锁问题。一个GenServer的初始状态是树中另一个主管的子worker。代码如下:
主管和工人:
defmodule Parallel.Worker.Supervisor do
import Supervisor.Spec
def start_link do
# Start up a worker for each core
schedulers = :erlang.system_info(:schedulers)
children
我基本上是在寻找一种相当于Ruby的长生不老药。让我这样做的东西:
list = [1,2,3,4,5,6,7]
sample(list)
#=> 4
sample(list, 3)
#=> [6, 2, 5]
我在这两个列表中都没有找到任何内容。更新的答案
正如JoséValim在《Elixir 1.1》及以上版本中所说,您现在可以使用以下方法从列表中获取随机元素:
-用于获取单个随机元素
-用于获取多个随机元素
示例:
list |> Enum.shuffle |
标签: Elixir
phoenix-frameworkecto
副食品,
我正在学习EXTO,我正在尝试将关联的记录插入到另一个表中。这有点正常,因为正在插入记录,但外键字段为空
代码:
变更集的检查
%Ecto.Changeset{action: nil, changes: %{name: "Kategory 1"}, constraints: [],
errors: [], filters: %{},
model: %{__meta__: #Ecto.Schema.Metadata<:built>, __struct__: Hangman
我很难用Elixir语言将一个模块加载到另一个模块中
例如,我有两个文件,如下所示:
$elixir b.ex
** (CompileError) b.ex:2: module A is not loaded and could not be found
a、 前
b、 前
我试图处决b.ex。然后我得到了如下所示的错误:
$elixir b.ex
** (CompileError) b.ex:2: module A is not loaded and could not be found
我试图加载一个非常大的JSON文件并将其绑定到一个变量,下面是我失败的代码
deps = File.open("../DepMap.json")
|> IO.read(:all)
|> JSX.decode
我要回来了
** (FunctionClauseError) no function clause matching in :io.request/2
(stdlib) io.erl:556: :io.request({:error, :enoent}, {:
我有一个用户和一个组模型(用户有许多组)。创建新的用户时,我想为该用户构建三个默认的组。让我们称它们为x,y和z(这将是名称)
我想exto.Changeset.put\u assoc是这项工作的合适工具。对的如何使用它在create功能中创建组
web/controllers/user\u controller.ex
[…]
def create(conn,%%{“user”=>user_params})do
changeset=User.changeset(%User{},User_参数)
在我的phoenix应用程序中,我需要通过名称验证单个字段。我之所以需要这个,是因为我有一个通过ajax机制进行更新的机制,在这个机制中,我一次只编辑/更新一个字段
我该怎么做?也就是说,给定一个字段名,我如何验证该字段以及仅验证单个字段?请注意,根据我的验证逻辑,即使字段为空,该字段的值也可能有效。我想我正确理解了您的问题
假设您有一个用户模型,其中包含字段名称、年龄、经验,并且无论何时更新/编辑,您都会发送一个用户id和更改
在更新方法中,我们将按用户id获取用户,并放置此更改并验证更改集(
虽然phenix服务器正常启动,但我无法在observer的应用程序列表中看到它
我所做的是:
elixir -S mix phoenix.server
而且,它是另一个终端:
iMac:~ Apple$ iex
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Interactive Elixir (1.2.4) - pres
标签: Elixir
phoenix-frameworkuser-presence
我正在构建一个whatsapp克隆,但我很难找到一些关于存在的东西
我有两个频道:
channel "chats:*", Typi.ChatChannel
channel "users:*", Typi.UserChannel
用户始终连接到用户:…频道,如果他在应用程序中,在加入时,我开始跟踪他的状态:
def join("users:" <> user_id, _payload, socket) do
send self(), :after_join
是否有方法读取和呈现位于以下位置的静态html文件:
控制器中服务器上的另一部分?我不希望重定向或通过静态页面功能提供此页面 您可以使用该函数发送自定义html内容。使用读取文件并将内容发送到客户端
def index(conn, _params) do
html(conn, File.read!("path/to/file.html"))
end
希望这有帮助。您应该使用它。与将整个文件读入内存,然后使用Phoenix.Controller.html/2将其发送相比,此函数将更有效地发送
标签: Elixir
phoenix-frameworkremember-merefresh-token
我正试图实现@hassox在以下GitHub问题中给出的建议:
用户登录后,我将生成一个令牌并将其存储在具有ttl的cookie中:
claims = Guardian.Claims.app_claims
|> Guardian.Claims.ttl({30, :days})
{:ok, token, full_claims } = Guardian.encode_and_sign(user, :remember, claims)
thirty_days = 86400 * 30
考虑这样的模块:
defmodule Sampple do
def start(nick, password, state \\ %State{}) do
{:ok, client} = ExIrc.start_client!
GenServer.start(__MODULE__,
[%{state | client: client,
nick: nick,
pass: password
}]
)
e
我用的是肝脏。如何在服务器上的Phoenix/Elixir中插入种子(填充数据库)?我知道有一种方法是运行Phoenix控制台。应该是这样的吗?
我不想要一个你认为有效的方法,但是很久以前没有尝试过或尝试过的方法
如果有另一种不涉及肝水肿的方法,也可以
混合运行priv/repo/seeds.exs在服务器上不起作用。检查文件/priv/repo/seeds.exs。
您可以在其中编写任何您想要的内容,并使用
mix run priv/repo/seeds.exs
编辑:对于edeliver
我正在尝试使用模块的\u1/1宏在\uuu中动态定义一些函数。这些函数的名称将由opts参数定义,opts参数将使用\u\u/1宏提供给\u\u。大概是这样的:
defmodule MyModule do
defmacro __using__(opts) do
names = Keyword.get(opts, :names)
Enum.each(names, fn(name) ->
quote bind_quoted: [name: name] do
我正在使用Elixir中的HTTPoison发出web请求:
HTTPpoison.post "http://localhost:3000/mymodels"," {\"param1\": \"#{value1}\" , \"param2\":\"#{value2}\"} ", [{"Content-Type", "application/json"}]
这是我得到的答复:
{:ok,
%HTTPoison.Response{body: "{\"id\":46,\"result\":18
我想在凤凰城做些类似的事情
function checkFile() {
$.ajax({
type: 'POST',
url: '/check.ex',
data: {'filename':'file.png'},
error : function(){
s
请im写一个测试,将检查用户是否重定向到一个特定的URL,如果他们登录并试图访问某些URL
#auth.ex
def authenticated_user(conn,_opts) do
if conn.assigns.current_user do
conn
|> redirect(to: Helpers.user_path(conn,:dashboard))
|> halt()
end
conn
end
# router.ex
pipe_thr
我用于将化身图像附加到用户模型:
defmodule Abc.User do
use Abc.Web, :model
use Arc.Ecto.Schema
schema "users" do
field :first_name, :string
field :last_name, :string
field :avatar, Abc.Avatar.Type
[...]
我从我想要为现有用户更改的化身转换缩略图。我更改了转换规则,需要重新转换它们
目前,我已经用Phoenix 1.3框架安装了Ecto 2.1.6。但我发现,Ecto有一个2.2.2版,它支持:忽略变更集的操作类型,例如,如果没有变更,它允许丢弃它们。这个特性是我的项目所需要的,但不幸的是我无法更新Ecto。我试着混合deps.update-exto,混合deps.unlock-exto,混合deps.update-exto——等等
那么怎么做呢?而且也可能是这不安全?虽然在2.2发布页面上,我看到它专门用于修复bug,所以不应该有破坏性的更改,但谁知道呢
编辑:
mix.
标签: Elixir
phoenix-frameworkecto
我不知道如何将SQL语句翻译成EXTO
凤凰城设置
SQL语句
选择days.date\u值,periods.name FROM days
左侧外部联接插槽打开(days.id=slots.day\u id)
左外连接周期打开(slots.period\u id=periods.id和
(periods.country_id=1或
期间(联邦(州(id=5))
其中days.date_值>='2017-01-01'和
days.date\u值Aleft\u连接默认情况下执行left-OUTER连
虽然Elixir鼓励我们不要使用try/catch块,但有时需要它们。在我编写的一个应用程序中,我使用了以下try/catch方法
try do
message = GenServer.call(via, :get_messages)
{:ok, message}
catch
:exit, _ -> {:error, "Process uuid no longer exists"}
end
在catch部分,我将:exit,-改为{:exit,{u}认为它们是同一个东西,
需要将上述枚举中的所有值提取到一个列表中这里有一种方法可以使用模式匹配、for和list进行此操作。keyfind/3:
list_of_comboboxes=[
{"option", [{"value", ""}, {"selected", "selected"}], ["Select Color"]},
{"option", [{"value", "White"}, {"data", "White"}], ["White"]},
{"option", [{"value", "Red"},
对于长度超过80个字符的长typespec,哪种代码样式
@spec function(list() | map(), list() | map(), list() | map(), list() | nil) :: map()
下面是来自Enum模块的示例。你可能想做类似的事情
运行mixformat,它将根据代码样式对其进行格式化。
@spec chunk_while(
t,
acc,
(element, acc -> {:
我想匹配两种参数集。
如果参数来自IndexController,则仅接收主id。
但如果参数来自与index\u路径(@conn,:index,main\u id)相同的页面,请选择框值
IndexController.ex
index.html.eex
似乎您需要处理可选参数,这就是我要做的:
defmodule IndexController do
def index(conn, %{"main_id" => main_id} = params) do
# retriev
如何根据这些结构的一个数字参数来组织这个团队列表
defmodule Seeder do
def start() do
team1 = %Team{name: "Team ", points: "10"}
team2 = %Team{name: "Team 2", points: "5"}
team3 = %Team{name: "Team 3", points: "4"}
team4 = %Team{name: "Team
标签: Elixir
phoenix-frameworkecto
在其中一个创建的表中,我必须在创建表之后添加时间戳。我当前的迁移脚本看起来像
defmodule Database.Repo.Migrations.UpdateSubscriptionTableInsertedAt do
use Ecto.Migration
def up do
alter table(:subscriptions) do
timestamps()
end
end
def down do
alter table(:subscr
注意:这是一个大大简化的示例,但问题是相同的
我试图用GraphQL接口包装一个现有的HTTP服务,/blog posts。只有我传入查询参数,extra data=true,服务才会在响应中返回一些额外数据。所以
GET/blog posts:获取ID和标题
GET/blog posts?extra data=true:获取ID、标题和extra data字段
我有一个类似于以下的苦艾酒模式:
query do
field :blog_posts, non_null(list_of(n
我有一份地图清单:
[%{~D[2019-02-11] => 7},
%{~D[2019-02-12] => 1},
%{~D[2019-02-15] => 1}]
我正试图通过以下方式将其变成一幅大地图:
my_map
|> Enum.map_reduce(%{}, fn x, acc ->
Map.merge(x, acc)
end )
但是,唉,这并不完全正确。做这件事的正确方法是什么?你根本不需要,用普通的古董:
[%{~D[2019-02-1
这是一个非常简单的模块,它不断检查请求者的IP。我使用反向连接代理,这意味着它在每个http请求上都会获得新的IP
defmodule Test do
def go() do
Enum.each(1..1, fn x ->
Task.Supervisor.async_nolink(Scraper.TaskSupervisor, fn ->
r = HTTPoison.get("https://api.ipify.org?format=json", []
我使用mixphx.new rumbl创建了一个新项目,效果很好。
然后我使用cdrumbl进入项目文件夹。之后,我尝试运行mix-exto.create,这导致了以下错误消息:
D:\Elixir\Projects\rumbl>mix ecto.create
10:35:16.370 [error] GenServer #PID<0.212.0> terminating
** (DBConnection.ConnectionError) tcp connect (local
我的配置~/.iex.exs是:
IEx.configure(inspect: [limit: :infinity, printable_limit: :infinity, pretty: true , safe: false] )
在IEx中,字符串、列表不会被截断,但尽管进行了配置,我还是有一些错误,如:
19:35:15.338 [error] #PID<0.404.0> running HTTP (cowboy_protocol) terminated
Server: lo
标签: Elixir
phoenix-frameworkphoenix-live-view
我的LiveView渲染中出现了一个奇怪的问题。以下是作为流发生的情况:
我从第一次选择中选择任何非默认选项,保留第二次选择默认->我将搜索表单提交到LiveView->在重新加载的屏幕上,我再次选择第一次选择的默认选项,保留第二次选择默认->我将搜索表单提交到LiveView->第二次选择消失
我从第二次选择中选择任何非默认选项,保留第一次选择默认->我将搜索表单提交到LiveView->在重新加载的屏幕上,我再次选择第二次选择的默认选项,保留第一次选择默认->我将搜索表单提交到LiveVie
我有Supervisor及其子Genserver,代码如下:
defmodule MyApp.StatisticSupervisor do
use DynamicSupervisor
def start_link(_) do
DynamicSupervisor.start_link(__MODULE__, [], name: {:global, __MODULE__})
end
def start_statistic(team_id) do
DynamicSu
我继承了一个web项目,其后端使用Phoenix框架用Elixir编写。我是一名Python(Django)开发人员,是Elixir的新手。这个项目的测试覆盖率为0,所以我认为这将是一个很好的开始,并熟悉Elixir和Phoenix的地方。但在我开始之前,我在运行混合测试时收到一条错误消息
16:27:35.818[info]应用程序tzdata开始于:nonode@nohost
**(Mix)无法启动应用程序cowboy:已在::application.cowboy中退出({:descript
我对长生不老药和凤凰城还不熟悉,这是我的第一个项目
在我的应用程序中,我实现了一个简单的用户名/密码身份验证,其中一些路由需要经过身份验证的访问
一切似乎都很顺利,除了我休息一下,第二天再次启动开发服务器。当我尝试访问主页时,浏览器显示“页面未正确重定向”。因此,我打开了开发工具,开发服务器似乎返回了302 Found和Location://,导致无限重定向
在dev服务器终端上,每个请求都会显示以下错误(因为重定向)
[error]Ranch listener DemoWeb.Endpoint
我们在代码库中使用一个外部库,它在Elixir 1.11中生成警告。通常,这不会是一个问题,但我们在编译代码库时将警告视为错误,以确保代码质量。有没有一种方法可以抑制此宏中的警告
使用{:prometheus_插头,“1.1.5”}和Elixir 1.11.2的示例:
defmodule Company.Api.PrometheusExporter do
use Prometheus.PlugPipelineInstrumenter
end
给出此输出:
==> api
Compil
我已经创建了一个助手,用于在向视图显示数字之前进行一些计算:
defmodule FourtyWeb.CalculationHelpers do
use Phoenix.HTML
def value_in_euro(amount_in_cents) when is_binary(amount_in_cents) do
cond do
# some code
end
end
end
这东西有用。我现在正在尝试测试它:
defmodule Fourty
这些例子似乎包括“数字”和“整数”。应该在哪些情况下使用它们
编辑:下面是每种方法的一个示例
@type bar :: %{atom => [{binary, integer}]}
def foo(x) when is_number(x), do: x
Number是一种更通用的类型,它同时引用浮点数和整数。如果您想检查一个值是否是数字,但不关心它是浮点还是整数,请使用数字。如果要强制执行特定类型,请使用整数/浮点。在上面的示例中,如果需要更具体的说明,可以使用is_integer(x
我刚刚将Elixir版本更新到v0.13.2,发现ListDict已被弃用,我应该如何处理这些DictAPI,就像我想获得[{foo',bar}]键“foo”的值一样。在Elixirv0.13或之前的版本中,我可以使用Dict.get([{foo',bar}],“foo”)来获取值,现在我不能这样做,否则它在Keyword.get/3中抛出没有匹配的函数子句,或者我应该只使用List.keyfind/3(可以获取正确的键值对),但我认为这不是一种方便的方式 您可以非常轻松地将这些列表转换为Has
行为定义回调,协议定义没有签名的方法。实现协议的模块应该定义所有这些方法。对于使用行为的模块也是如此。语义上的区别是什么
我能想到的一个区别是,协议只能为单一类型实现一次,因为我们可以根据需求多次为模块实现行为。我很清楚什么时候用什么。除此之外还有其他区别吗?协议是基于类型/数据的多态性。当我调用Enum.each(foo,…)时,具体的枚举由foo的类型决定
行为是一种无类型的插件机制。当我调用GenServer.start(MyModule)时,我显式地将MyModule作为插件传递,并且G
我在elixir中有以下代码:
def get_trackerid(imei) do
client = get_new_client()
{:ok, result} = :cqerl.run_query(client, "SELECT * FROM trackers_by_imei where imei = \'#{imei}\';")
row = :cqerl.all_rows(result)
end
现在,许多函数都在调用get_trackerid函数,每次调用该函数时,都会调
所以,我有一个混合项目,有moduleUploader.Server和moduleUploader.Utility
Uploader.Utility定义request宏。问题是我不能像这样在Uploader.Server中访问它,我只能调用Uploader.Utility.request,这是非常不协调的,因为服务器模块提供shell接口,request将是命令的常见参数
我可以把这个宏放在Uploader.Server模块中,但逻辑上它不属于那里
我是否可以通过内部名称而不是外部名称(如ali
我正试图用这种方式加密字符串
defp encrypt_password(changeset) do
case changeset do
%Ecto.Changeset{valid?: true, changes: %{password: password}} ->
put_change(changeset, :password_hash, Fernet.Ecto.String.dump(password))
_ ->
changeset
我正在创建一个2d贴图,并希望从预填充空值开始
我知道下面这些在长生不老药中是行不通的,但这正是我要做的
def empty_map(size_x, size_y) do
map = %{}
for x <- 1..size_x do
for y <- 1..size_y do
map = Map.put(map, {x, y}, " ")
end
end
end
我曾经尝试过将其作为2D数组来使用,但我认为使用坐标图作为关键点的平面贴图将
我有像这样的长生不老药:
0.15300000000000002
5.140000000000005
0.0033000000000000004
但我只想展示:
0.153
5.14
0.0033
我熟悉使用
:erlang.float_to_binary
…指定小数精度和舍入选项。问题是我不知道精确到小数点后几位
有没有简单的方法可以做到这一点?由于浮点错误的性质,我认为没有一种通用的方法可以在不选择精度的情况下做到这一点
:compact选项到float\u to\u binary可以
我在伞式应用程序结构中遇到了一个奇怪的问题。当我在运行mixclean命令后编译整个项目时,我从应用程序\u a收到以下警告消息:
function ApplicationB.ModuleName.function_name/0 is undefined (module
ApplicationB.ModuleName is not available)
lib/file_name.ex:13`
问题是模块就在那里,ApplicationB.ModuleName.function\u na
标签: Elixir
ectodialyzertypespec
我有这个方法
@spec modify_query(Ecto.Query.t) :: Ecto.Query.t
def modify_query(query) do
# modifies a Ecto.Query.t
end
然后我用一个查询链接该方法:
Item
|> where([active: true])
|> order_by([desc: :start])
|> modify_query
代码工作正常,但显然,透析器订购方没有返回异位查询.t,因为它抱怨:
对于我编写的函数,doctest失败。我收到的错误消息说,生成操作数/0未定义。我的意图是在doctest中使用generate\u operans/6的默认参数——这可能吗?做我想做的事是明智的还是故意的
函数如下所示:
@doc """
Generate the operands for arithmetic practice problems.
## Examples
iex> operands = generate_operands()
iex> lengt
我有一个表单数组:
[
[~N[2019-02-08 00:00:00.000000], 1],
[~N[2019-02-02 00:00:00.000000], 8],
[~N[2019-02-05 00:00:00.000000], 2]
]
比如说,我想把所有的日期时间转换成字符串。最好的方法是什么?当您需要使用可枚举项时,可以在Enum模块中查看。map将enumerable(本例中的列表)作为其第一个参数,将transforming函数作为其第二个参数
[
[~N[2
标签: Elixir
phoenix-frameworkecto
在有关上下文的凤凰城教程部分中,我遇到了以下错误:
令人惊讶的是,我添加了以下关联:
我遗漏了什么?问题是线路有问题
field :user_id, :id
拆下那条线就行了
上一页 1 2 ...
24 25 26 27 28 29 30 ...
下一页 最后一页 共 125 页