我想为我的网站运行一个带有凤凰后端的angularJS前端.我希望我的根路由将用户引导到包含我的角度客户端的静态目录中的预构建页面,然后使用phoenix运行API.过去我通过路由匹配在轨道上使用ruby来完成此操作:
get '/', to: redirect('/foobar.html')
Run Code Online (Sandbox Code Playgroud)
有没有办法和凤凰做类似的事情?
我正在使用Phoenix Framework运行以下内容以连接到https://api.twitch.tv/kraken/videos/top.它过去曾奏效,并不确定导致此案发生的原因.停止并重新启动iex似乎没有解决它.运行Elixir 1.0.5,Phoenix 0.14.0,Erlang OTP 18
iex(2)> "https://api.twitch.tv/kraken/videos/top" |>
...(2)> HTTPoison.get!()
** (exit) exited in: :gen_server.call(:hackney_manager, {:new_request, #PID<0.334.0>, #Reference<0.0.2.365>, {:client, :undefined, :hackney_dummy_metrics, :hackney_ssl_transport, 'api.twitch.tv', 443, "api.twitch.tv", [connect_timeout: 5000, recv_timeout: :infinity], nil, nil, nil, true, :hackney_pool, :infinity, false, 5, false, 0, nil, nil, nil, :undefined, :start, nil, :normal, false, false, false, nil, :waiting, nil, 4096, "", [], :undefined, nil, nil, nil, nil, :undefined, nil}}, :infinity)
** (EXIT) no process
(stdlib) gen_server.erl:212: :gen_server.call/3
src/hackney_client/hackney_manager.erl:65: :hackney_manager.init_request/1
src/hackney_client/hackney_manager.erl:55: :hackney_manager.new_request/1
src/hackney_connect/hackney_connect.erl:181: :hackney_connect.socket_from_pool/4
src/hackney_connect/hackney_connect.erl:41: …Run Code Online (Sandbox Code Playgroud) 我正在使用Elixir和Phoenix Web框架,但现在我一直试图验证外键约束.因此,给定一个Post包含许多注释的Comment模型,我将模型编写如下:
defmodule MyApp.Comment do
use MyAPp.Web, :model
schema "comments" do
field :body, :text
belongs_to :post, MyApp.Post
timestamps
end
@required_fields ~w(body post_id)
@optional_fields ~w()
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> foreign_key_constraint(:post_id)
end
end
Run Code Online (Sandbox Code Playgroud)
及其单元测试:
defmodule MyApp.CommentTest do
# [...]
test "changeset with non existent post" do
attrs = %{
body: "A comment."
post_id: -1 # some non-existent id?
}
refute Comment.changeset(%Comment{}, attrs).valid?
assert {:post_id, "does not exist"} in …Run Code Online (Sandbox Code Playgroud) 我有一个带有这个(简化)模式的地址的ecto模型:
defmodule Address do
use Ecto.Model
schema "addresses" do
field :zip, :string
field :country, :string
# snip
end
@countries_requiring_zip ~w(US) # snip
def changeset(model, params \\ :empty) do
model
|> cast(params, ~w(country), ~w(zip))
|> validate_zip
end
defp validate_zip(changeset) do
if get_field(changeset, :country) in @countries_requiring_zip do
# ????
end
changeset
end
end
Run Code Online (Sandbox Code Playgroud)
我想标记zip为必需而不是可选,但仅当国家/地区是白名单时,但我无法找到一种干净的方式来编写验证.如何添加该约束?
对于Phoenix的控制器中的一些查询,我有两个计划
计划1:
defmodule Demo.UserController do
# ...
def index do
# This is just for example
# The point is Repo in used here
Repo.all(User)
end
end
Run Code Online (Sandbox Code Playgroud)
计划2:
defmodule Demo.User do
# ...
def all do
# Put all Repo API and building query logic in Model
Repo.all(__MODULE__)
end
end
Run Code Online (Sandbox Code Playgroud)
我更喜欢Plan 2.因为在大多数情况下,我可以把所有关于在Model中获取数据的逻辑放在一起.
但我发现官方指南使用计划1(docs/model)和Phoenix默认代码alias Repo在Controller而不是Model(web/web.ex)
哪一个更好?为什么?
我试图在凤凰应用程序中实现永久链接.
目标是将localhost:4000/products/1更改为localhost:4000/products/productname
我尝试跟踪Ryan Bates的一集关于rails中的永久链接实现, 但是无法为凤凰城的模型找到一个to_param函数.
请帮忙.
如何查看路径的输出iex?
我知道我可以做到这一点,mix Phoenix.routes但我想以交互方式做到这一点.
这是我想做的一个例子:
iex -S Phoenix.server
mymodel_path
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
** (CompileError) iex:2: undefined function mymodel_path/0
Run Code Online (Sandbox Code Playgroud) 我试图在数据库中搜索一个字符串是否匹配数据库中另一个字符串的一部分.我可以让它匹配,如果两个确切使用ilike,但当我只搜索字符串的一部分时,它不会捕获包含它的数据.以下是我的代码查询的代码:
servicesstate = Repo.all(from p in Callme.Service, where: ilike(p.locations, ^zip.state))
Run Code Online (Sandbox Code Playgroud)
当价值准确时它会匹配("南卡罗来纳州","南卡罗来纳州"),但我希望它匹配的时候("位于南卡罗来纳州","南卡罗来纳州")
谢谢
我创建了一个Phoenix应用程序,然后添加了用于发送电子邮件的Bamboo模块,我今天下午使用Elixir成功发送了我的第一封电子邮件,但我不得不将用户名和密码硬编码到config.exs.
我读了这篇文章并在我的凤凰项目的根目录中设置了一个.env文件,我试图在config.exs文件中使用以下语句加载环境变量.
username: System.get_env("SMTP_USERNAME"),
password: System.get_env("SMTP_PASSWORD"),
Run Code Online (Sandbox Code Playgroud)
但是,电子邮件没有发送,竹子给了我一个相当神秘的错误信息.
我正在使用终端中的以下命令构建phoenix应用程序,
iex -S mix
Run Code Online (Sandbox Code Playgroud)
我在ifx会话中手动发送电子邮件,其命令类似于下面的命令,
CrjApi.Email.hello_text_email("me@example.com") |> CrjApi.Mailer.deliver_now
Run Code Online (Sandbox Code Playgroud)
但只有在用户名/密码被硬编码到config.exs文件中时才会发送电子邮件.我如何使用.env我设置的文件,所以我不必硬编码用户名/密码config.exs?
注意:我正在运行OS X,并使用鱼壳.
我正在玩一个使用phx 1.3和伞形应用程序的新产品套件的架构.
我有一个基于Phoenix的企业级WebRTC软电话(许多按键,一个显示器,多个输入和输出音频设备选择等).我用Phoenix开发了一个Slack克隆消息传递应用程序原型.这两个应用程序相当大我需要将手机与聊天应用程序集成到一个前端,可能只是手机,只是聊天客户端,两者都是.我需要向聊天客户端添加许多新功能,我还希望该体系结构支持使用同一客户端在呼叫服务器上设置其他设置(基于用户)以及可能的大量管理级别设置.我可能也会在未来添加其他应用程序,如操作员面板,日志查看器,列表继续...客户端JS非常简单,没有前端框架.我渲染模板服务器端并通过频道推出html.
我想建立这个可插拔的.相同的端点和数据库.一个常见的UX.
我认为伞中有两个常见的应用程序,一个用于Phoenix端点和一对控制器,另一个用于主要的Repo和一些模式.我试图弄清楚为每个应用程序使用两个或更多其他应用程序会有多困难.一个用于上下文和模式,另一个用于控制器,视图,模板和早午餐资源.可能是第三方API的另一个.
为了实现这一点,我需要为每个应用程序中的路由器进行动态调度.处理每个应用程序中包含的迁移的方法,可能还有更多我尚未想到的.
有人试过吗?是否有任何类似结构的开源项目?