【问题标题】:Phoenix: Requiring IEx in only :dev and :test for entire projectPhoenix:整个项目仅在 :dev 和 :test 中需要 IEx
【发布时间】:2017-05-21 16:30:06
【问题描述】:

我是 Elixir/Phoenix 的新手,我想知道是否有一种方法本质上是 require IEx 以达到 IEx.pry 的目的,就像在 Ruby/Rails 中您可以添加类似

group :test, :development do
  gem 'pry', require: 'pry'
end

这将允许您在基本上任何文件中binding.pry,而无需包含require 'pry'

我发现在任何我想调试的控制器、模型、视图等上都必须require IEx 很乏味。

【问题讨论】:

    标签: elixir phoenix-framework elixir-iex


    【解决方案1】:

    您可以使用web/web.ex 文件。

    一个持续使用控制器、视图和 以此类推。

    这可以在您的应用程序中用作:

    use App.Web, :controller
    use App.Web, :view
    

    下面的定义将为每个视图、控制器、 等等,所以要保持简短和干净,专注于进口、用途和 别名。

    当您需要控制器、模型等时,只需将require IEx 放在这里即可。

    defmodule App.Web do
      def model do
        quote do
          ...
          require IEx
        end
      end
      def controller do
        quote do
          ...
          require IEx
        end
      end
    end
    

    【讨论】:

    • 这也将在:prod 环境中完成,这显然是 OP 不想要的。
    • ^ 正是。我以前完全按照@droptheplot 的建议做了。这是一种解决方法,但我希望有更多的开发/测试特定的东西。
    • 谁能告诉我为什么if Mix.env == "dev", do: require IEx 不起作用?
    • @Johannes 当编译器尝试扩展宏 IEx.pry 时,它还没有评估条件(if 本身就是一个宏)。您可以在与require IEx 相同的条件下使用IEx.pry。另请注意文档对Mix.html#env/0 所说的话:此函数不应在运行时在应用程序代码中使用"
    猜你喜欢
    • 2018-01-12
    • 2022-08-14
    • 2016-10-02
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多