cookie存储期望conn.secret_key_base至少为64个字节 - 但它已经存在

时间:2017-03-08 02:38:01

标签: elixir phoenix-framework

在制作中我有这个:

use Mix.Config

config :my_app, MyApp.Endpoint,
  secret_key_base: System.get_env("MYAPP_SECRET_KEY_BASE")

该值在/ etc / environment中设置并且足够长,我是从“mix phoenix.gen.secret”创建的。但是,它仍然会抛出错误:

** (exit) an exception was raised:
        ** (ArgumentError) cookie store expects conn.secret_key_base to be at least 64 bytes
            (plug) lib/plug/session/cookie.ex:159: Plug.Session.COOKIE.validate_secret_key_base/1
            (plug) lib/plug/session/cookie.ex:152: Plug.Session.COOKIE.derive/3
            (plug) lib/plug/session/cookie.ex:103: Plug.Session.COOKIE.put/4
            (plug) lib/plug/session.ex:92: anonymous fn/3 in Plug.Session.before_send/2
            (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
            (plug) lib/plug/conn.ex:961: Plug.Conn.run_before_send/2
            (plug) lib/plug/conn.ex:392: Plug.Conn.send_resp/1
            (my_app) web/controllers/home_controller.ex:1: MyApp.HomeController.action/2

1 个答案:

答案 0 :(得分:0)

是否可以在编译应用程序之前设置该值?

如果在配置中使用System.get_env("..."),则在编译时检索此值。如果按以下顺序执行操作,则可能无法使用您期望的环境变量值:

  1. 设置配置
  2. 编译应用程序
  3. 设置环境变量
  4. 运行应用程序
  5. 您可以通过运行mix compile --force来验证这是否是问题。

    如果按以下顺序执行步骤,则将使用正确的环境变量。

    1. 设置环境变量
    2. 设置配置
    3. 编译应用程序
    4. 运行应用程序