标签: phoenix-framework

管道操作员如何在最后一行返回结果?

我可以time_stamp在最后一行返回而不用大括号提取它吗?

{:ok, time_stamp} = Myapp.Repo.insert(changeset) # |> Map.get time_stamp
time_stamp

# {:ok, %Myapp.TimeStamp{__meta__: #Ecto.Schema.Metadata<:loaded>, active: true...}
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

0
推荐指数
1
解决办法
749
查看次数

如何设置Phoenix PubSub订阅者回调

我有一个相当简单的要求,围绕凤凰城内置的2个服务(现在):

ServiceA负责注册用户.注册用户时,ServiceA广播包含有关新创建用户的信息的消息.现在使用Controller操作中的以下代码完成此操作:

ServiceA.Endpoint.broadcast("activity:all", "new:user", %{email: "test@test.com"})

ServiceB 负责监听所有这些活动广播并与他们合作(基本上建立一个活动源).

我遇到了一个绊脚石,因为我可以看到ServiceA向Redis播放消息(使用Phoenix.PubSub.Redis),但不完全了解如何让订阅者ServiceB处理它...

下面这段代码是据我已经成功地获得,这确实的东西时,广播消息,然后抛出一个例外.

部分订户模块

defmodule ServiceB.UserSubscriber do

  def start_link do
    sub = spawn_link &(process_feed/0)
    ServiceB.Endpoint.subscribe(:user_pubsub, "activity:all")
    {:ok, sub}
  end

  def process_feed do
    receive do
      params ->
        IO.inspect "processing goes here..."
    end
    process_feed
  end

end
Run Code Online (Sandbox Code Playgroud)

例外

[error] GenServer :user_pubsub terminating
** (FunctionClauseError) no function clause matching in Phoenix.PubSub.RedisServer.handle_info/2
Run Code Online (Sandbox Code Playgroud)

我猜我在GenServer某个地方错过了一大堆工作,但似乎无法在网上发现任何暗示在哪里.

elixir publish-subscribe redis phoenix-framework

0
推荐指数
1
解决办法
1122
查看次数

凤凰这么慢?请帮助改善其性能

我之所以学习灵丹妙药只是因为互联网上的很多文章都很有希望它的响应时间不到一毫秒.我昨天构建了我的第一个应用程序,我发现它的性能比rails更快.发生了什么?

让我来解释一下我的应用 它实现了ecto-secure-password包提供的基本认证机制:

defmodule HelloPhoenix.User do
  use HelloPhoenix.Web, :model
  use SecurePassword

  schema "users" do
    field :first_name, :string
    field :last_name, :string
    field :username, :string

    has_secure_password
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

defmodule HelloPhoenix.SessionController do
  use HelloPhoenix.Web, :controller

  def create(conn, %{ "session" => %{ "username" => username, "password" => password }}) do
    if user = HelloPhoenix.User.authenticate(HelloPhoenix.Repo.get_by(HelloPhoenix.User, username: username), password) do
      conn
      |> put_session(:user_id, user.id)
      |> json(UserSerializer.run(user))
    else
      conn
      |> put_status(422)
      |> json(%{})
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

所以,我正在使用这些命令:

MIX_ENV=prod mix compile
MIX_ENV=prod mix phoenix.server
Run Code Online (Sandbox Code Playgroud)

失败和成功认证的响应时间约为~130ms,而此处的rails响应时间约为150ms.我做错了什么?

elixir phoenix-framework

0
推荐指数
1
解决办法
1521
查看次数

Elixir/Phoenix总和列

我正在尝试获取特定列的总和.我有一个订单模式,字段总数,存储总价格.现在我正在尝试创建一个查询,它将总计所有订单的总价值,但不确定我是否做得对.这是我到目前为止:

def create(conn, %{"statistic" => %{"date_from" => %{"day" => day_from, "month" => month_from, "year" => year_from}}}) do

date_from = Ecto.DateTime.cast!({{year_from, month_from, day_from}, {0, 0, 0, 0}})
revenue = Repo.all(from p in Order, where: p.inserted_at >= ^date_from, select: sum(p.total))

render(conn, "result.html", revenue: revenue)
end
Run Code Online (Sandbox Code Playgroud)

只是<%= @revenue %>在html.eex中调用它.截至目前,它不会返回错误,只是在页面上呈现随机符号,而不是总收入.

我认为我的查询是错误的,但无法找到有关如何使其正常工作的良好信息.任何帮助表示感谢,谢谢!

elixir elixir-framework phoenix-framework

0
推荐指数
1
解决办法
1344
查看次数

获取错误Ecto.Changeset.fetch/2是未定义的或私有的

我试图在页面上做一个简单的登录.每当我尝试将我的页面路由到用户注册时,我收到以下错误.

UndefinedFunctionError at GET /users/new
function Ecto.Changeset.fetch/2 is undefined or private. Did you mean one of:

      * fetch_change/2
      * fetch_field/2
Run Code Online (Sandbox Code Playgroud)

这个错误似乎来自Changeset,因为每当我注释掉我的Changeset并只渲染一个空的html页面时它就可以工作.任何帮助将非常感激.

网/控制器/ user_controller.ex

defmodule Test.UserController do
  use Test.Web, :controller
  alias Test.User

  def new(conn, params) do
    changeset = User.changeset(%User{})
    render conn, "new.html", changeset   
  end

  def show(conn, %{"user_id_hash" => user_id_hash}) do
    render conn, "user_index.html", %{layout: {Test.LayoutView, "react.html"}}
  end

  def create(conn, %{"user" => user_params}) do
    changeset = User.changeset(%User{}, user_params)
    case Repo.insert(changeset) do 
      {:ok, user} ->
        conn
        |> put_flash(:info, "#{user.username} thank you for signing …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

0
推荐指数
1
解决办法
2525
查看次数

Phoenix,模型架构中的功能

如何在架构中添加功能?我想创建用于动态地将字段添加到模型模式的函数.例:

  def func do
    # .. loop to create dynamic fields
    field :street, :string
  end

  schema "objects" do
    func
  end

... Error:

** (CompileError) web/models/objects.ex:12: undefined function func/0
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

0
推荐指数
1
解决办法
453
查看次数

在Rails for Ecto/Phoenix中是否有相当于子弹的宝石?

我发现bullet gem是一个非常有用的工具,用于在Rails应用程序中捕获慢速数据库查询.是否有类似的工具Ecto/ Phoenix有助于通知您N + 1和其他慢查询?

ruby-on-rails elixir ecto phoenix-framework

0
推荐指数
1
解决办法
377
查看次数

Phoenix CodeReload无法正常工作

我有一个phoenix应用程序,但是我需要在每次后端更改后手动重新启动服务器。 code_reload已启用并plug CodeReload正在使用。

我尝试生成一个新项目(mix phoenix.new --no-brunch),尝试了不同的编辑器(vim,vscode,atom和textedit),尝试始终plug CodeReload在端点中进行操作,并尝试手动将其设置MIX_ENVdev-但是,更改文件时,项目仍无法编译。我应该如何追踪问题所在?

CodeReload不工作时运行mix phoenix.serveriex -S mix phoenix.server

elixir-mix elixir phoenix-framework

0
推荐指数
1
解决办法
666
查看次数

如何像凤凰城其他语言一样早日归来

我想在有效检查后返回,然后转到其他页面(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") #(2)
end
Run Code Online (Sandbox Code Playgroud)

似乎一次重定向了其他页面,但之后继续进行。我怎样才能像其他语言一样以回程停止?

elixir phoenix-framework

0
推荐指数
1
解决办法
106
查看次数

指定模块名称后如何访问与Config相关的键

在phoenix中查看配置文件时,如果我创建这样的配置:

config :myapp,
  http: 4000
Run Code Online (Sandbox Code Playgroud)

我可以像这样在我的代码中引用该键:

Application.fetch_env!(:myapp, :http)
Run Code Online (Sandbox Code Playgroud)

有时配置似乎特定于某个模块,例如下面的MyApp.Endpoint。

这只是将配置分为几类吗?如果我也需要如何在代码中引用下面的http端口?

config :myapp, MyApp.Endpoint,
  http: [port: 4000],
  debug_errors: true
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

0
推荐指数
2
解决办法
100
查看次数