如何无需启动iex -S mix会话,直接从Shell调用Elixir模块函数?
不用启动iex -S mix,直接从Shell调用Elixir模块函数的方法
当然可以啦!不用每次都进入iex -S mix会话,直接在系统Shell里就能调用Phoenix应用中你的辅助模块函数,给你两种实用的方法:
方法一:用mix run -e直接执行(最推荐)
mix run命令会自动帮你加载整个Phoenix应用的环境——包括Ecto、Repo这些依赖都会初始化好,完美适配你的MyApp.Helper模块场景。
在项目根目录下,直接运行:
mix run -e "MyApp.Helper.start()"
如果你的函数有返回值(比如示例里的{:ok, "Done"}),执行后会直接在Shell里输出结果。要是需要执行多行代码,也可以把逻辑写成字符串传入,比如:
mix run -e "result = MyApp.Helper.start(); IO.inspect(result)"
生产环境下只要指定环境变量就行:
MIX_ENV=prod mix run -e "MyApp.Helper.start()"
方法二:用elixir命令手动加载项目(适合特殊场景)
如果不想用mix,也可以直接用elixir命令,但需要手动指定项目的编译产物路径,让Elixir能找到你的模块:
elixir -pa _build/dev/lib/*/ebin -e "MyApp.Helper.start()"
不过这种方法需要确保项目已经编译过(可以先跑mix compile),而且不会自动初始化Phoenix应用的服务(比如Repo可能没启动),所以除非有特殊需求,还是推荐第一种方法。
额外提示
如果你的MyApp.Helper模块里有依赖应用的初始化逻辑(比如Ecto查询),mix run会自动帮你启动整个应用,不用手动调用Application.start(:my_app),非常省心。
内容的提问来源于stack exchange,提问作者skwidbreth
相关产品推荐
相关产品推荐

