我正在按照本教程进行操作,在添加此代码和角色Factory之后,我收到以下错误:
15:09:08.808 [错误] GenServer #PID <0.245.0>终止**(UndefinedFunctionError)函数Ecto.Adapters.SQL.begin_test_transaction/1未定义或私有.你是说其中一个:
Run Code Online (Sandbox Code Playgroud)* in_transaction?/1 (ecto) Ecto.Adapters.SQL.begin_test_transaction(Pxblog.Repo) (elixir) src/elixir_compiler.erl:125: :elixir_compiler.dispatch_loaded/6 (elixir) src/elixir_lexical.erl:17: :elixir_lexical.run/3 (elixir) src/elixir_compiler.erl:30: :elixir_compiler.quoted/3 (elixir) lib/code.ex:363: Code.require_file/2 (elixir) lib/enum.ex:651: Enum."-each/2-lists^foreach/1-0-"/2 (elixir) lib/enum.ex:651: Enum.each/2 (mix) lib/mix/tasks/test.ex:216: Mix.Tasks.Test.run/1
这是我的test_helper.exs文件:
{:ok, _} = Application.ensure_all_started(:ex_machina)
ExUnit.start
Mix.Task.run "ecto.create", ~w(-r Pxblog.Repo --quiet)
Mix.Task.run "ecto.migrate", ~w(-r Pxblog.Repo --quiet)
Ecto.Adapters.SQL.begin_test_transaction(Pxblog.Repo)
Run Code Online (Sandbox Code Playgroud)
可能有什么不对?我已经更新了所有的依赖项mix deps.update --all
.
提前致谢!
我正在使用 Phoenix 框架创建一个网站。
我想根据用户使用 PC 还是智能手机使用不同的布局和模板。
所以,我想通过检查用户代理来切换布局和模板。
检查用户代理和切换布局和模板的最佳方法是什么?或者,你知道有什么有用的库可以做到这一点吗?
我需要将包含有效UTC时间的字符串转换为一个字符串Ecto.DateTime
,稍后我将以正确的格式将其插入到我的数据库中.我尝试过使用该Ecto.DateTime.cast(date)
方法,但似乎没有用.该字符串Sat Aug 04 11:48:27 +0000 2012
来自Twitter API.
我知道有些像Timex这样的库我还没有检查过.Elixir中是否有任何简单易用的解决方案?
我想渲染json与foreign_key相关的两个模型(Event和Activity).
在控制器中,我执行此查询:
def all_nested(conn, %{"event_id" => id}) do
event = Repo.get! nested_all_query, id
render(conn, "show_all.json", event: event)
end
defp nested_all_query do
from event in Event,
left_join: activities in assoc(event, :activities),
preload: [activities: activities]
end
Run Code Online (Sandbox Code Playgroud)
当我在iex控制台上尝试该查询时,查询返回正确的结果,并且它内部有一个Activity的"活动"数组.
然后,渲染时,我在视图上有这个代码:
def render("show_all.json", %{event: event}) do
render_one(event, Project.EventView, "event_all.json")
end
def render("event.json", %{event: event}) do
%{id: event.id,
name: event.name,
description: event.description,
num_participants: event.num_participants,
minimum_age: event.minimum_age,
price: event.price,
date_start: event.date_start,
date_end: event.date_end,
reg_date_open: event.reg_date_open,
reg_date_close: event.reg_date_close,
rules: event.rules}
end
def render("event_all.json", %{event: event}) do
render("event.json", %{event: …
Run Code Online (Sandbox Code Playgroud) 有什么方法可以通过选择另一个联接的列来预加载记录?
# table structure
# User 1---* Post 1---* PostTag *---1 Tag
# extract definition of scheme
scheme "posts" do
...
has_many :post_tags, PostTag
has_many :tags, [:post_tags, :tag]
end
Run Code Online (Sandbox Code Playgroud)
以下伪代码表达了我的目标(但不起作用)。
query = from post in Post,
join: user in User, on post.user_id == user.id,
select: %{
id: post.id,
title: post.title,
user_name: user.name, # <= column at joined table
},
preload: [:tags]
Repo.all(query)
#=> ** (Ecto.QueryError) the binding used in `from` must be selected in `select` when using `preload` in query:` …
Run Code Online (Sandbox Code Playgroud) 我知道你可能认为这个问题很愚蠢,但我需要使用HtmlUnit.但是,它以XML或文本形式返回页面.
我不知道如何获得纯HTML(与浏览器返回的源代码相同)
我需要这个,因为我需要使用一些书面模块.有任何想法吗?
我尝试了以下脚本:
LOAD DATA LOCAL INFILE 'myfile.csv'
REPLACE INTO TABLE `mydb`.`mytable`
CHARACTER SET latin1 FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES (`field1`, `field1`, `field1`, `field1`, `field1`, `field1`);
Run Code Online (Sandbox Code Playgroud)
当我使用500K记录的文件时,它可以正常工作,但是当我尝试400万条记录的csv文件时,它会返回:
Query OK, 0 rows affected (2.79 sec)
Records: 0 Deleted: 0 Skipped: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
当然,在2.70秒内不会添加任何内容!
我的RAM是4GB,我的输入文件(大文件)是370MB.
谁有人建议解决方案?
我正在使用 OTP 来管理事件队列:
defmodule ParrotApi.MatchingSupervisor do
use Supervisor
## Callbacks
def start_link() do
Supervisor.start_link(__MODULE__, [])
end
def init(_) do
children = [
worker(ParrotApi.MatchingServer, []), # TODO: State is gone if this crashes
# Supervise connections
supervisor(Registry, [:unique, :connection_registry]),
supervisor(ParrotApi.ConnectionSupervisor, []),
]
supervise(children, strategy: :one_for_one)
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果服务器重新启动,我的队列会发生什么?重新启动后我需要它继续存在。据我所知,它存储在内存中,因此如果服务器重新启动,它就会被擦除。
我要做的是将一个空字符串作为字段的值传递,并验证它是否为nil.问题是validate_required会在nil和空值上引发错误.如何让它接受空白值?
模式
schema "messages" do
field :user_id, :string
field :text, :string
timestamps()
end
Run Code Online (Sandbox Code Playgroud)
变更
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:text, :user_id])
|> validate_required([:text, :user_id])
end
Run Code Online (Sandbox Code Playgroud) 我试用了 sportradar API。我真的不关心运动,但我正在尝试学习一些凤凰和灵药。我正在尝试做一些超级基本的事情,但似乎无法实现。基本上,我尝试使用给定的参数构建一个 URL 并调用 API 端点。返回响应并用返回的内容填充视图。这就是我所坚持的。
def index(conn, _params) do
render(conn, "index.html")
end
def find_games(conn, params) do
response = params["find_games"]["calender"]
end
Run Code Online (Sandbox Code Playgroud)
我基本上想说此时打电话https://api.sportradar.us/nba/trial/v4/en/games/response["day]/response["month"]/response["year"]/schedule.json?api_key={api_key}
如何使用 Elixir 和 Phoenix 发出 http 请求?