【问题标题】:Phoenix can't start - Missing AppName.Endpoint.start_linkPhoenix 无法启动 - 缺少 AppName.Endpoint.start_link
【发布时间】:2015-02-12 08:55:59
【问题描述】:

Pheonix 变化如此频繁,以至于我不确定自己所做的是否正确。

我正在尝试学习一些教程,所有教程在您完成编译后都有“mix phoenix.start”命令,并且应该启动服务器。 (在 Github 的问题页面上有一些讨论,他们将用 mix phoenix.server 命令替换它,您必须手动执行某些操作,而不是真正遵循它。无论如何,这是在开发版本 v0.8.0- dev. 我正在使用最新的稳定版本 0.7.2)

我在尝试发出“mix phoenix.start”命令尝试启动服务器时遇到错误
(应用名称:PhoenixCrud):

> mix phoenix.start

=INFO REPORT==== 13-Dec-2014::15:23:08 ===
    application: logger
    exited: stopped
    type: temporary

=INFO REPORT==== 13-Dec-2014::15:23:08 ===
    application: cowboy
    exited: stopped
    type: temporary

=INFO REPORT==== 13-Dec-2014::15:23:08 ===
    application: cowlib
    exited: stopped
    type: temporary

=INFO REPORT==== 13-Dec-2014::15:23:08 ===
    application: ranch
    exited: stopped
    type: temporary
** (Mix) Could not start application phoenix_crud: PhoenixCrud.start(:normal, []) returned an error: shutdown: failed to start child: PhoenixCrud.Endpoint
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) undefined function: PhoenixCrud.Endpoint.start_link/0
            (phoenix_crud) PhoenixCrud.Endpoint.start_link()
            (stdlib) supervisor.erl:314: :supervisor.do_start_child/2
            (stdlib) supervisor.erl:297: :supervisor.start_children/3
            (stdlib) supervisor.erl:263: :supervisor.init_children/2
            (stdlib) gen_server.erl:306: :gen_server.init_it/6
            (stdlib) proc_lib.erl:237: :proc_lib.init_p_do_apply/3

文档有更新的 phoenix.server 命令,但我也尝试过,但混合显示找不到任务。

无论如何,app_name/lib/app_name/endpoint.ex 似乎缺少 start_link 函数。我应该提供那个吗?我现在不知道该放什么,因为我只是在试用 Phoenix Web 框架并且对它一无所知(因此有教程。)

那么,我是否应该提供 start_link 功能,如果是这样,可以给我一些暂时存根以尝试遵循一些教程。否则是bug吗?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    您的服务器似乎已经启动。您只需要使用命令 killall beam.smp

    杀死它并重新启动

    【讨论】:

      【解决方案2】:

      我的 git 知识不是很好,但这里是:

      要使用 0.7.2 分支,您需要专门签出 v0.7.2 标签。 所以我就是这样做的:

      git clone https://github.com/phoenixframework/phoenix.git
      cd phoenix
      git checkout tags/v0.7.2
      mix do deps.get, compile
      mix phoenix.new app_name ../app_name
      cd ../app_name
      #change the mix deps to: (I think you can just use default hex deps as well)
      {:phoenix, github: "phoenixframework/phoenix", tag: "v0.7.2"}
      mix do deps.get, compile
      mix phoenix.start
      

      否则,您通常 git clone 在 master 分支上的 Phoenix 代码在 0.8.0-dev 上,您需要将 deps 设置为 github master 分支(如@JoseValim 所述)

      {:phoenix, github: "phoenixframework/phoenix"} 
      

      也就是说,您现在需要使用 mix phoenix.server 命令。

      希望对其他人有所帮助。

      【讨论】:

        【解决方案3】:

        这是凤凰版的东西。端点仅在 master 中可用,但您似乎没有使用 master。您应该将 {:phoenix, github: "phoenixframework/phoenix"} 添加到您的 mix.exs 或从 0.7.2 分支生成 Phoenix 项目。

        【讨论】:

        • 我使用的是十六进制的 0.7.2 分支。现在我只是将它更改为 github master 分支并且它工作。但这很令人困惑,因为我认为 master 分支在 v0.8.0-dev 上,因为我必须使用 mix phoenix.server 来启动它。根据更新日志:https://github.com/phoenixframework/phoenix/blob/master/CHANGELOG.md,首先将其更改为使用 mix phoenix.server 与 mix phoenix.start 的是 v0.8.0-dev
        • 这让我很生气。为什么我不能只运行我已经拥有的版本?有人有很好的解释吗?现在我无法运行我的 1.1.4 版本,我想我必须更新到 1.2。但是这个更新会促使我将 phoenix_ecto 更新到 > '3.0'。我还有很多其他需要 phoenix_ecto v2 的部门。问题是:我让一切正常运行,而不是重新加载 pc,现在我必须花费大量时间来修复所有部门才能运行我的项目。为什么?
        • @AvaelKross 我真的不知道你在说什么。只要您将 mix.lock 检查到源代码控制中(并且应该),每次运行 mix deps.get 时,您将获得与上次使用它时完全相同的版本,无论是上周还是 2014 年.
        • @AvaelKross 并进一步澄清,此问题仅在过去发生,因为我们没有适当的 phoenix.new。所以人们会使用 0.8.0-dev 生成一个新的应用程序,但唯一可用的版本是 0.7.2。这绝对不应该发生在今天。
        • @JoséValim 感谢您的回答。老实说,我不知道为什么mix phoenix.server 在电脑重启后无法启动(出现此undefined function: MyApp.Endpoint.start_link/0 错误)。上次我遇到这个错误时,我已经将 phoenix 从 1.1.3 更新到 1.1.4 并且问题已经消失了。昨天还以为升级到1.2不是解决办法。我试图修复所有部门以相互配合;不成功。然后我恢复了所有更改并再次运行mix deps.get。凤凰在那之后开始了。这只是非常奇怪的行为。
        猜你喜欢
        • 2023-04-01
        • 2012-11-15
        • 2014-03-14
        • 2019-08-10
        • 1970-01-01
        • 2016-02-20
        • 2018-10-24
        • 2015-03-19
        • 1970-01-01
        相关资源
        最近更新 更多