标签: phoenix-framework

如何使用Phoenix框架发送电子邮件

使用Phoenix框架发送电子邮件的最佳和最方便的方法是什么?

elixir phoenix-framework

15
推荐指数
3
解决办法
3296
查看次数

在应用程序启动时运行代码Phoenix Framework(Elixir)

如果您的应用程序/ api在vanilla Phoenix应用程序中启动,您是否会将要运行的代码放入?假设我想确保创建一些mnesia表或配置我的记录器后端.另一件事是运行时配置.他们在文档中提到它,但我不清楚在哪里定义/更改运行时配置.

Endpoint.ex 看起来像是一个完成初始配置的地方,但通过查看文档,我找不到任何允许我在启动时只运行一次代码的回调.

elixir phoenix-framework

15
推荐指数
1
解决办法
2837
查看次数

Ecto - 验证相关模型的存在

如何验证Ecto中相关模型的存在?

schema "foo" do
  has_many: bar, Bar

  timestamps
end

@required_fields ~w(bar) # invalid
Run Code Online (Sandbox Code Playgroud)

有办法吗?并验证这些字段的最小/最大数量?

elixir ecto phoenix-framework

14
推荐指数
1
解决办法
1686
查看次数

为自引用Ecto模型构建JSON映射

我有一个Ecto模型:

defmodule Project.Category do
  use Project.Web, :model

  schema "categories" do
    field :name, :string
    field :list_order, :integer
    field :parent_id, :integer
    belongs_to :menu, Project.Menu
    has_many :subcategories, Project.Category, foreign_key: :parent_id
    timestamps
  end

  @required_fields ~w(name list_order)
  @optional_fields ~w(menu_id parent_id)

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end
Run Code Online (Sandbox Code Playgroud)

如您所见,Category模型可以通过子类别atom引用自身.

以下是与此模型关联的视图:

defmodule Project.CategoryView do
  use Project.Web, :view

  def render("show.json", %{category: category}) do
    json = %{
      id: category.id,
      name: category.name,
      list_order: category.list_order
      parent_id: category.parent_id
    }
    if is_list(category.subcategories) do
      children = render_many(category.subcategories, Project.CategoryView, …
Run Code Online (Sandbox Code Playgroud)

json elixir ecto phoenix-framework

14
推荐指数
1
解决办法
1472
查看次数

Phoenix日志中出现奇怪错误:运行MyApp.Endpoint已终止

我在凤凰 webapp中遇到错误,我正在开发.这是一个包含少量模型和页面的简单应用程序,其中所有模型创建表单都以多标签形式添加.

我在日志中遇到以下错误,但是在浏览器结束时工作正常.从日志中我也无法理解错误以及如何调试它.

[error] #PID<0.1603.0> running MyApp.Endpoint terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
    ** (Plug.Conn.AlreadySentError) the response was already sent
        (plug) lib/plug/conn.ex:428: Plug.Conn.resp/3
        (plug) lib/plug/conn.ex:415: Plug.Conn.send_resp/3
        (my_app) web/controllers/personal_info_controller.ex:1: MyApp.PersonalInfoController.phoenix_controller_pipeline/2
        (my_app) lib/phoenix/router.ex:265: MyApp.Router.dispatch/2
        (my_app) web/router.ex:1: MyApp.Router.do_call/2
        (my_app) lib/my_app/endpoint.ex:1: MyApp.Endpoint.phoenix_pipeline/1
        (my_app) lib/plug/debugger.ex:90: MyApp.Endpoint."call (overridable 3)"/2
        (my_app) lib/phoenix/endpoint/render_errors.ex:34: MyApp.Endpoint.call/2
        (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
        (cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
Run Code Online (Sandbox Code Playgroud)

elixir web phoenix-framework

14
推荐指数
2
解决办法
2458
查看次数

Ecto与条件的关联

比方说,我有两个型号,PostComment和评论模型可以是1出2种,normal并且fancy这是由列定义typecomments表.

现在我想在我的Post模型上添加2个关联,其中一个引用花哨的注释,一个引用正常注释,我该怎么做?所以我想要这样的东西:

has_many :fancy_comments, MyApp.Comment, where: [type: 0]
has_many :normal_comments, MyApp.Comment, where: [type: 1]
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

14
推荐指数
2
解决办法
3027
查看次数

如何检测用户是否因网络断开而离开Phoenix通道?

我有一个Elixir/Phoenix服务器应用程序,客户端通过websockets通过内置通道系统连接.现在我想检测用户何时离开频道.

旁注:我正在使用Google Chrome扩展程序中的javascript客户端库.为此,我从Phoenix中提取了ES6代码,将其转换为javascript,并稍微调整一下,使其独立运行.

现在当我关闭弹出窗口时,服务器立即触发该terminate/2功能reason = {:shutdown, :closed}.扩展端没有任何关闭回调,所以这很棒!

但是,当客户端只是失去网络连接(我连接第二台计算机,只是拉出网络插头),然后terminate/2将不会触发.

为什么以及如何解决此问题?

我玩了timeout选择,transport :websocket, Phoenix.Transports.WebSocket但这没有成功.

更新: 使用新的真棒凤凰1.2的Presence东西,这不再需要了.

elixir websocket channels phoenix-framework

14
推荐指数
1
解决办法
4070
查看次数

在凤凰城处理嵌套表格/外部变更集的正确方法是什么?

我正在凤凰城编写一个简单的CRUD应用程序,管理员在创建新组织时可以使用初始员工帐户进行配置.

有效地,组织和用户之间的关系是多对多的.

我想出了以下内容:

  1. 用户架构:

    defmodule MyApp.User do
    use MyApp.Web, :model
    
    schema "users" do
      field :name, :string
      field :email, :string
      field :password, :string, virtual: true
      field :password_hash, :string
    end
    
    def changeset(...) # validate email, password confirmation etc.
    
    Run Code Online (Sandbox Code Playgroud)
  2. 组织架构:

    defmodule MyApp.Org do
      use MyApp.Web, :model
    
      schema "orgs" do
        field :official_name, :string
        field :common_name, :string
    
        has_many :org_staff_users, MyApp.OrgStaffUser
        has_many :users, through: [:org_staff_users, :user]
     end
    
     def changeset(model, params \\ :empty) do
      model
      |> cast(params, ~w(official_name common_name), [])
     end
    
     def provisioning_changeset(model, params \\ :empty) do …
    Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

14
推荐指数
1
解决办法
3409
查看次数

无法混合ecto.create,角色'postgres'不存在

我尝试创建一个名为postgres的用户.我重新安装了postgres brew.我能用它来运行它

postgres -D /usr/local/var/postgres

当我跑步时mix ecto.create,我仍然得到错误:

~/code/blog_phoenix:.mix ecto.create
** (Mix) The database for BlogPhoenix.Repo couldn't be created, reason given: psql: FATAL:  role "postgres" does not exist.
~/code/blog_phoenix:.
Run Code Online (Sandbox Code Playgroud)

postgresql elixir ecto phoenix-framework

14
推荐指数
1
解决办法
2720
查看次数

Elixir/Phoenix:如何在配置文件中使用第三方模块?

似乎在凤凰中配置文件的加载和编译方式在使用config.exs或中使用第三方模块时会出现问题dev.exs/prod.exs/test.exs.

示例:要设置Guardian进行JWT身份验证,我正在尝试使用该JOSE.JWK模块在我的JWK创建/加载config.exs.我可以在控制台中使用该模块iex -S mix phoenix.server.它当然是作为依赖项安装的.我得到的错误是

** (Mix.Config.LoadError) could not load config config/config.exs
    ** (UndefinedFunctionError) undefined function JOSE.JWK.from_file/2 (module JOSE.JWK is not available)
Run Code Online (Sandbox Code Playgroud)

这是我的config.exs中的代码

# Configure Guardian for JWT Authentication
config :guardian, Guardian,
  allowed_algos: ["HS512"], # optional
  verify_module: Guardian.JWT,  # optional
  issuer: "MyApp",
  ttl: { 30, :days },
  verify_issuer: true, # optional
  secret_key: System.get_env("GUARDIAN_KEY_PASSPHRASE") |> JOSE.JWK.from_file(System.get_env("GUARDIAN_KEY_FILE")),
  serializer: MyApp.GuardianSerializer
Run Code Online (Sandbox Code Playgroud)

当我将调用包装JOSE.JWK.from_file/2在匿名函数中时,它可以工作.但是当然Guardian.config(:secret_key)的值是匿名函数本身而不是它的返回值:

# Configure Guardian for JWT Authentication
config :guardian, …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

14
推荐指数
1
解决办法
1781
查看次数

标签 统计

elixir ×10

phoenix-framework ×10

ecto ×5

channels ×1

json ×1

postgresql ×1

web ×1

websocket ×1