heroku - Phoenix 框架的 Heroku 和 Mailgun 问题的环境变量

标签 heroku elixir phoenix-framework

我正在关注this关于部署到 Heroku 的指南和 this一个用于发送电子邮件。

开发中一切正常。我的变量在 Heroku 中设置:

heroku config
...
MAILGUN_DOMAIN:  https://api.mailgun.net/v3/xxxxxx.mailgun.org
MAILGUN_KEY:     key-3-xxxxxx
...

并从配置文件加载,如下所示:

config :take_two, Mailer,
    domain: System.get_env("MAILGUN_DOMAIN"),
    key: System.get_env("MAILGUN_KEY")

但是,当我尝试在 Heroku 上发送电子邮件时,当从环境变量设置 Mailgun 配置时,我收到此错误:

** (FunctionClauseError) no function clause matching in IO.chardata_to_string/1
    (elixir) lib/io.ex:346: IO.chardata_to_string(nil)
    (elixir) lib/path.ex:467: Path.join/2
    (elixir) lib/path.ex:449: Path.join/1
             lib/client.ex:44: Mailgun.Client.send_without_attachments/2

当未为 Mailgun 客户端设置域时,会发生这种情况。但它应该从环境变量中设置。我做了一个简单的模块来测试:

defmodule TakeTwo.Mailer do
    require Logger

    use Mailgun.Client,
        Application.get_env(:take_two, Mailer) 

    def blank_shot do
        Logger.info Application.get_env(:take_two, Mailer)[:domain]
        Logger.info Application.get_env(:take_two, Mailer)[:key]
        send_email from: "steve@xxx.com", to: "speggy@xxx.com", subject: "Hello", text: "This is a blank shot"
    end

当我运行 TakeTwo.Mailer.blank_shot 时,我看到记录了正确的域/关键变量,后面跟着错误。我不知道如何远程调试 Mailgun 客户端。

最后,如果我在 shell 中重新创建上述模块(运行 heroku run iex -S mix 后),它就可以正常工作!?

我感觉原来的模块加载的时候环境变量可能还没有加载?

最佳答案

答案有点隐藏在评论中,所以我想让它更容易找到。正如另一个答案提到的,环境变量不可用,但构建包允许您将它们配置为:

我创建了一个 elixir_buildpack.config 文件并添加了以下内容:

config_vars_to_export=(DATABASE_URL MAILGUN_DOMAIN MAILGUN_KEY SECRET_KEY_BASE)

关于heroku - Phoenix 框架的 Heroku 和 Mailgun 问题的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306973/

相关文章:

serial-port - 读取串行输入,直到控制字符指示消息结束

elixir - 从 Plug.Conn 获取 HTTP_REFERER

ruby-on-rails - 如何将本地数据库复制到heroku?

ruby - 我在 Sinatra 应用程序中收到 "Heroku push rejected, no Rails or Rack app detected"错误

ruby-on-rails - 无法安装 json - Ubuntu 14.04 - Rails

elixir - 启动混合任务流程依赖

node.js - Heroku "npm install jugglingdb mongoose"已经做了

tags - 如何从 .eex 文件调用函数

heroku - 如何将 Phoenix 控制台 (iex) 与 heroku 一起使用?

elixir - 你如何删除 ecto 中的多对多关联?