我对mix.exs中的编译路径设置感到困惑。设置如下:
defmodule MyProject.Mixfile do
use Mix.Project
def project do
[ app: :my_project,
version: "0.0.1",
elixir: "~> 0.12.0",
deps: deps,
escript_main_module: MyProject,
compile_path: "ebing/ew/ebin"]
end
# Confi
Process.exit(self,:normal)执行该任务,但它打印出**(exit from#PID)normal。有没有办法在没有消息的情况下退出?有。但是解决方案取决于进程正在运行的代码(以及您看到消息打印的位置)
如果进程没有使用OTP行为,并且只是一个递归函数,那么您可以简单地从该函数返回。您的递归函数只需要有一个函数不再调用自身的情况。大概是这样的:
def recursive_function(:exit) do
:ok
def recursive_function(oth
是否有任何网站允许测试Elixir代码片段,保存它们并进行如下共享:
(死链接)
我发现类似于:
但他们不允许共享代码,第二次使用Elixir v0.10.2我终于发现,我在2015年发布了elixirplayground.com,但它不再活跃
限制:执行时间限制为5秒,网络已禁用,文件系统为只读
共享是通过Github GIST实现的。有一个共享按钮可以返回URL,或者您可以使用?gist=gistID参数加载任何gist
希望你喜欢 很快就会得到长生不老药的支持 我们最近发布了一个多
我喜欢在测试中使用断点来查看出了什么问题,但是测试的30秒超时使我无法自由地四处查看
有没有办法禁用它?以下操作不起作用:
@tag timeout: 0
test "something" do
assert something == 42
end
更新:
使用Elixir 1.1,您还可以使用--trace选项运行测试:混合测试--trace。它会自动将超时设置为无穷大
-何塞·瓦利姆
前长生不老药1.1:
也许可以尝试使用:
ExUnit.configure(timeout: 600
标签: Elixir
phoenix-frameworkelixir-iex
我正在尝试增加IEx.pry会话的超时时间。具体地说,我正在Phoenix框架单元测试中进行窥探。我在测试主体中添加了以下内容:
require IEx
IEx.pry
我查看了IEx文档中的pry方法,它说第一个参数是以毫秒为单位的超时时间。但是,当我将pry调用更新为:
IEx.pry(60000)
。。。它仍然会在30秒内超时。如何增加此超时时间
编辑
为了子孙后代,使用Elixir 1.1,您可以在测试命令上使用--trace标志,并将使用超时无限。例如:
$ iex -S mix
我试图找出将两个相同大小的列表组合成键值对映射的最佳方法
一段时间以来,我一直在使用相同的函数来处理CSV和原始SQL查询的这种情况,这些查询返回某种类型的头列表和行列表
这是我一直在使用的函数
Enum.zip(list1, list2) |> Enum.into(%{})
例如:
# For CSVS
header = ["column1","column2","column3"]
rows = [["a","b","c"],["d","e","f"]]
Enum.each rows
在Phoenix框架中,如何获取当前环境的名称
我已经尝试使用系统读取env变量。获取_env(“MIX_env”),但该值并不总是设置的。您可以使用:
Mix.env()不适用于生产环境或其他使用已编译版本(使用Exrm/Distillery构建)的环境,或者当Mix不可用时
解决方案是在config/config.exs文件中指定它:
config:your_应用程序,env:Mix.env()
然后,您可以在应用程序中获得环境atom,如下所示:
Application.get_env
我是,根据链接的书籍(第64页),以下功能:
defmodule MyList do
def square([]), do: []
def square([ head | tail ]), do: [ head*head, square(tail) ]
end
应表现如下:
MyList.square [4, 5, 6]
[16, 25, 36]
但当我把它插入我在Ubuntu上安装的Elixir 1.2.0时,我得到:
MyList.square [4, 5, 6]
[16, [2
标签: Elixir
phoenix-frameworkecto
我仍在努力探索如何通过中的关联创建/更新has\u许多。我也读过关于协会的帖子,但我仍在挣扎
我所拥有的是:
web/models/dish.ex
defmodule Mp.Dish do
use Mp.Web, :model
schema "dishes" do
# ...
has_many :dish_dietary_prefs, Mp.DishDietaryPref, on_delete: :delete_all,
on_replace: :delet
我正在代理服务器后面工作,需要为一个Mix项目安装hex和一些模块
Eshell V7.2
Interactive Elixir (1.2.2)
我能够下载hex-0.9.0.ez以使用mix-archive.install F:/hex-0.9.0.ez安装hex
$ mix hex
Hex v0.9.0
我也在试着用同样的方法。我下载了.zip并运行:
$ mix archive.build -i C:/kafka_ex-0.5.0 -o C:/kafka_ex-0.5.0.ez
Gen
我在Phoenix应用程序中遇到以下错误:
https://github.com/phoenixframework/phoenix/blob/2861f0db3df3d81ee6ce79f928ef4e0b439c4dcd/installer/templates/new/config/config.exs#L16
cookie存储需要设置conn.secret\u key\u base
它似乎来自my PostController模块中此身份验证功能的重定向(至:会话路径(conn,:new)
我正试着写《干灵丹妙药》,戴夫·托马斯的书还在后边呢
下面是Phoenix控制器的一部分,它是为卡自动生成的。实际上,我有各种各样的产品,它们的性能与卡完全相同,因此我想概括一下。下面是我的一项工作,但它没有编译,错误在**{}**
我很确定我犯了一个根本性的错误,因为我对这门语言(但不是函数式编程)还不熟悉
如果您可以帮助我,请注意,我还需要将card\u path转换为变量,但我认为这将与estimate\u path product类似
我也尝试过,但也没有成功
(Struct, pa
我有一个电子邮件模型,它存储电子邮件地址。在保存之前,我想对值进行降格处理。另外,我想创建一个MD5总和,并将其保存在md5sum中。在凤凰城最干净的方式是什么
web/models/email.ex
defmodule MyApp.Email do
使用MyApp.Web,:model
模式“电子邮件”怎么办
字段:值,:字符串
字段:md5sum,:字符串
时间戳
结束
@必填字段~w(值)
@可选_字段~w()
@“医生”
基于'model'和'params'创建变更集。
如果未提供参数,
我们可以在分离模式下启动phoenix服务器,如下所示:
$ MIX_ENV=prod PORT=4000 elixir --detached -S mix phoenix.server
在崩溃或主机重新启动的情况下,如何重新启动phoenix?推荐的方法是什么
编辑
# cat /proc/version
Linux version 3.13.0-57-generic (buildd@brownie) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) )
我有点困在如何实际设置与变更集的关联上。我的模型中有以下代码:
defmodule MyApp.MemberApplication do
use MyApp.Web, :model
use Ecto.Schema
use Arc.Ecto.Schema
alias MyApp.Repo
alias MyApp.MemberApplication
schema "applications" do
field :name, :string
field :e
假设我们有这样的地图:
state = %{
data: %{
"default" => %{
"someKeyword" => %{updated: 2}},
"baila" => %{
"someKeyword" => %{updated: 2}},
"morena" => %{updated: 2}
}
}
在本例
标签: Elixir
phoenix-frameworkecto
在我的Phoenix应用程序的控制器中,我经常使用get/3或通过/3自动触发并响应一个外部NoResultsError
我希望phoenix的协议能够呈现我的应用程序的ErrorView,它就是这样做的
但是,在此过程中,所有标题都会从我的响应中删除,这些标题在exto.NoResultsError之前在conn中完全可用。此问题与CORS问题一起出现,但其他标题也被删除(使用put\u resp\u header测试)
我觉得奇怪的是,这些标题会随着一些隐含的行为突然消失。我可能会通过自己处
我需要获取客户端的IP地址,这不起作用:
def create(conn) do
ip_address = conn.inet.ip_address
# ....
由于键:未在:%Plug.Conn中找到inet。那么我怎样才能获得IP地址呢?请检查:
远程ip—客户端的ip,例如:{151236219228}。该字段将被理解X-Forwarded-For报头或HAProxy代理协议的插头覆盖。它默认为对等方的IP
这就是你要找的:
conn.remote_ip
获取IP
我正在用Elixir编写一个应用程序,使用Postgres作为数据存储。在EXTO中,我定义了这个实体:
defmodule MyModule.User do
use Ecto.Schema
import Ecto.Changeset
@primary_key {:id, :binary_id, autogenerate: true}
schema "users" do
field :email, :string
end
@fields ~w(email)
我有一个定义宏的下一个模块:
defmodule BServer.Command do
defmacro __using__(_)do
quote do
@before_compile unquote(__MODULE__)
import BServer.Command, only: [command: 1, command: 2,
command_description: 1]
我已经发布了Distillery,所以我可以从/bin/app start开始,现在我尝试用elixir开始,如下所示:
path = "/Users/user/app/0.0.1/bin/"
System.cmd("./app", ["start"], cd: path)
System.cmd(Path.join(path, "app"), ["start"], cd: path)
但不幸的是,get:enoint错误。我想这是因为/app实际上不是一个命令,而是一个文件。所以,我的问题是
到目前为止,我已经创建了查询:
query = from page in "wagtailcore_page",
where: page.url_path == ^url_path,
join: h in ^table_name,
where: h.page_ptr_id == page.id
我现在想在h
例如,如果我传入[:body,:footer]我想运行:
query = from [_page, h] in query,
select:
我的第一个凤凰城项目之一。作为其中的一部分,我为标记文本编辑字段(类似于SO/GitHub)创建了一个拖放文件上载。当一个文件被拖放到该字段时,我点击一个异步控制器操作将该文件保存到文件系统
以下是处理异步文件上载的控制器操作:
def create_photo(conn, %{"images" => upload}) do
if uploaded_file = upload do
File.cp(uploaded_file.path, Application.app_dir(
安装苦艾酒插头后,出现以下错误:
= Compilation error in file lib/kerrigan_api_web/router.ex ==
** (UndefinedFunctionError) function KerriganApiWeb.Absinthe.Plug.init/1 is undefined (module KerriganApiWeb.Absinthe.Plug is not available)
这是我的副驾驶
{:phoenix, "~> 1.3
我正在尝试使用HTTPoison处理来自API调用的响应
在我的应用程序上下文中,我有
def添加到购物车(数据,用户)do
case HTTPoison.post!(
"https://api.moltin.com/v2/carts/“用户
“/项目”,数据,
[{“授权”,
“承载#{Agent.get(:token,fn state->state end)}”,
{“内容类型”,“应用程序/json”}]do
{:好的,%HTTPoison.Response{status_code:201
我试图在构建联盟结构时添加用户id,但出现以下错误:
** (KeyError) key :user_id not found in: %{__meta__: #Ecto.Schema.Metadata<:built, "leagues">, __struct__: Statcasters.Schema.League, id: nil, inserted_at: nil, name: nil, teams: #Ecto.Association.NotLoaded<associa
我遇到了这样运行单个测试文件会通过的问题:
混合测试/app\u web/controllers/page\u controller\u test.exs
但运行整个测试套件将失败:
混合测试
1) test GET / (AppWeb.PageControllerTest)
test/app_web/controllers/page_controller_test.exs:4
** (RuntimeError) expected response with status 200, got
有此代码:
defmodule TestQuery do
def build_query() do
Enum.map(["test1", "test2", "hello"], fn item ->
query(item)
end)
end
def query(item) do
case String.contains? item, "test" do
true -> item
false -> nil
长生不老药/凤凰框架在这里
我正在尝试添加一个新路由,该路由将解析作为URL段传入的字符串
路由器
# Ping endpoint
scope "/", AppWeb do
pipe_through :api # Use the default browser stack
get "/:hash", ListnerController, :ping
end
listner_controller.ex
def ping(conn, %{"hash" => hash}) do
我正在尝试使用长生不老药计算条纹中的按比例分摊成本。
我正在使用Stripity\u Stripe库
这就是我所做的
获取当前时间作为unix时间
使用Stripe.invoice获取即将发布的发票
我将客户id替换为客户id,将订阅id替换为客户订阅id,将计划id替换为新计划id(希望进行更改),并将订阅按比例分配日期替换为按比例分配日期
它返回为
{:ok,
%Stripe.Invoice{
amount_due: 17226,
application_fee: nil,
我来自python/django的背景,一个简单的python manage.py makemigrations生成了我的迁移
现在的问题是,对于Ecto,我找不到这样的命令。似乎我必须使用混合exto.gen.migration然后手动填充迁移。它不会自动检测模型中的更改,我必须手动填充
您是否知道如何几乎自动生成迁移(例如,如果我在现有模型中添加一个字段)。截至2018年6月,此功能不存在
作为一个想法,为什么不尝试解析模型中的schema子句,将其与底层数据库进行比较,并根据差异生成语句呢
这段代码引发错误:
iex(35)> a = <<18::size(7)>>
<<18::size(7)>>
iex(36)> b = <<100::size(7)>>
<<100::size(7)>>
iex(37)> <<a <> b>>
** (ArgumentError) argument error
标签: Elixir
phoenix-frameworkecto
场景:
设置一个空的PostgreSQL实例
使用迁移文件仅在Elixir中设置表、外键等
这被认为是长生不老药世界的好做法吗?是的,这是好做法
通过迁移,您始终可以回滚数据库更改,还可以将数据库更改保留在版本控制中,以便始终可以看到何时以及谁更改了数据库结构
迁移后,您还可以与团队中的所有开发人员保持同步,因此,如果您创建了迁移,下一个获取最新代码的人只需迁移数据库的最新版本,现在每个人都处于同步状态,而不必传递数据库转储。是的,这是一个很好的做法
通过迁移,您始终可以回滚数据库更改,还可以将
标签: Elixir
phoenix-frameworkecto
所以我有Phoenix Project v1.3,我想在后端添加分页查询。我正在尝试使用对我的查询进行分页。但我被困在安装过程中
我收到一个依赖项错误
mix.exs
defp deps do
[
{:phoenix, "~> 1.3.2"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, "~> 3.2"},
{:postgrex, ">= 0.0.0"},
{:gettext, "~> 0.11"}
我不确定如何最好地做到这一点:
我有一个函数可以查找IP并返回它来自的国家
country = Geolix.lookup(remote_ip).country.registered_country.name
有时它会失败,在这种情况下,没有定义任何数组键
在其他语言中,我可能会这样做:
try do
country = Geolix.lookup(remote_ip).country.registered_country.name
rescue
country = nil
end
我有一个模式exchange\u账户和user\u档案
user\u profile有一个外键列exchange\u accounts\u id,从exchange\u accounts架构中引用。我想在user\u profile表中插入数据,我需要将exchange\u accounts\u id关联到exchange\u accounts表的主键列
我有create\u user\u profile功能
我用exto.Multi.run
现在基本上我不理解两者之间的建筑联系
def cre
标签: Elixir
elixir-mixelixir-poison
我有一个类似的代码。我希望它在属性上用引号回显一个有效的JSON,这样它就可以通过管道传输到另一个命令。但在回响的同时,它却在扯掉所有的引语
def test_function() do
map = %{
"key1" => 12,
"key2" => "value1",
}
json = Poison.encode!(map)
IO.inspect(json)
Mix.Shell.c
我可以按如下方式声明一个范围:
range = 1..10
有没有办法将范围转换为列表?使用Enum.map/2
range = 1..10
Enum.map(range, fn(x) -> x end)
或
Enum.to_list/1是您要查找的:
iex(3)> Enum.to_list 1..10
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
将可枚举项转换为特定集合的通用方法是Enum.into:
Enum.into 1..10, []
#=>
我在Elixir项目中使用Erlang库时遇到了一个小问题。
所讨论的库是用于ISO-8583邮件打包和解包的erl8583
我为erl8583找到了github存储库,并将我的mix.exs调整为以下内容:
defmodule Iso.Mixfile do
use Mix.Project
def project do
[app: :iso,
version: "0.0.1",
elixir: "~> 1.0",
build_embedded
给定磁盘上文件的路径,以字节为单位检索文件大小的最惯用方法是什么
path = "/tmp/some_file.txt"
这在Elixir中通过使用文件模块中的内置stat功能实现;在这里,我将谈论两个:和
这两个函数都会为其“值”返回一个%File.Stat{}结构,然后通过模式匹配对其进行分解,以提取包含文件大小(以字节为单位)的size字段。这些函数仅在1)返回和2)处理异常(例如未找到文件)的方式上有所不同
用于引发异常的文件大小检查(file.Error):
用于文件大小检查,以优雅
mix phoenix.gen.html生成一组文件。我该如何撤销这一代人?或者我必须手工操作吗?我认为没有选项可以从或混合帮助命令中“撤消”。但是,此mix命令phoenix.gen.html确实显示了生成的文件如下所示:
$ mix phoenix.gen.html Tweet tweets tweet:string
* creating web/controllers/tweet_controller.ex
* creating web/templates/tweet/edit.html
标签: Elixir
phoenix-frameworkecto
我如何预加载一个有多个且属于与EXTO关联的的两侧
例如,在一篇文章有许多评论且评论属于一篇文章的情况下:
defmodule MyApp.Article do
schema "articles" do
has_many :comments, MyApp.Comments
timestamps
end
end
defmodule MyApp.Comment do
schema "comments" do
belongs_to :article, MyApp
如何将\uuuu模块\uuuu与字符串连接起来
temp=\uuuuuu模块“/blabla”不工作
如果\uuuuu模块\uuuu是Elixir.Tasks.Process.Lixo,则我需要将temp var设置为
“Elixir.Tasks.Process.Lixo/blabla”仅引用当前模块。它返回一个不能与字符串连接的原子。为此,您需要使用以下命令将其转换为字符串:
\uuuu模块\uuuu仅引用当前模块。它返回一个不能与字符串连接的原子。为此,您需要使用以下命令将其转换为字符串:
下面的代码显示了我所问问题的示例:
为什么要映射、枚举等。。。不能在保护子句或我自己的宏中使用
defmodule GuardMod do
defmacro has_any_key(arg, keys) do
quote do
Map.keys(unquote(arg), unquote(keys)) |> Enum.any?
end
end
end
defmodule OtherMod do
import
标签: Elixir
load-balancingphoenix-frameworklatency
我正在尝试使用elixir/phoenix制作一个地理负载均衡器,这样当客户端最初连接时,它将选择最接近的ping/延迟最小的服务器,并在将来的连接中使用该服务器
假设客户端在get/balance、PageController、:index处到达平衡器,在我的数据库中有两台服务器:server1.domain.com和server2.domain.com。是否可以通过elixir后端将连接或ping从客户端传递到两台服务器
我可能可以在前端创建逻辑,用js ping,然后将值返回到后端进行存储
标签: Elixir
phoenix-frameworkecto
在我的phoenix控制器中,我使用:
...
def delete(conn, %{"id" => id}) do
post = Repo.get!(Post, id)
with {:ok, %{post: %Post{}}} <- Posts.delete_post(post) do
send_resp(conn, :no_content, "")
end
end
...
但当post不存在时,此测试失败:
...
** (Ecto.No
我想在有效检查后返回,然后转到其他第1页。
然而,它似乎在后面,然后呈现索引第2页
def index(conn, %{"id" => id}) do
unless Model.is_valid!(id) do
conn
|> redirect(to: other_path(conn, :other)) #(1)
end
# More process are after this.
render(conn, "index.html") #(
给定一个字符串str=“üabc123”,并且size=5。我想获取前5个字节(“üabc”),以及字符串的其余部分(“123”)
目前我正在做:
str = "üabc123"
size = 5
a = binary_part(str, 0, size) # "üabc"
b = String.trim_leading(str, a) # "123"
似乎有一个更干净的方法可以做到这一点。还有其他方法吗?您可以使用二进制模式匹配
<< a::binary-size
我知道我可以使用?a语法获取字符的码点
iex> ?a
97
但是如果a是二进制的,“a”呢?在这种情况下,如何获取代码点?您可以使用二进制模式匹配:
iex(1)>=“a”
“a”
iex(2)>码点
97
或使用,并提取第一个值:
iex>“a”|>String.to|u charlist |>hd
97
小心UTF-8分解形式。在进一步处理之前调用输入总是比较安全的(将:nfc作为第二个参数传递)
人们可能会想到
<<cp::utf8>> = "á"
标签: Elixir
phoenix-frameworkecto
我不知道如何在凤凰城使用外星
我的模式是:
schema "members" do
field :first_name, :string
field :last_name, :string
belongs_to :prefecture, Prefecture
timestamps()
end
schema "prefectures" do
field :prefecture_name, :string
has_many :members
1 2 3 4 5 6 ...
下一页 最后一页 共 125 页