当我在我的凤凰应用程序中运行自定义混合任务(我认为它甚至不与凤凰相关但仍然)使用一些外部库(例如https://github.com/knrz/geocoder)我得到了
** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
:erlang.send(:geocoder_workers, {:"$gen_cast", {:cancel_waiting, #Reference<0.0.1.13074>}}, [:noconnect])
直到我添加
Application.ensure_all_started(:geocoder)
到Mix任务。所以我的问题是为什么我的所有依赖项都不会自动启动?是我做错了什么?
答案 0 :(得分:8)
您是对的,默认情况下,在Mix任务中不会启动应用程序的依赖项。它们需要手动启动。启动所有应用程序依赖项的最简单方法是调用Mix.Task.run("app.start")
(如果Mix不可用,则调用Application.ensure_all_started(:my_app)
)。这样,mix.exs
文件中列出的所有应用程序如果尚未运行,将会启动。
这是在Phoenix Framework网站Mix Tasks页面末尾附近记录的:
如果您想让新的混音任务使用您的应用程序 基础架构,您需要确保应用程序何时启动 混合任务正在执行中。如果需要,这特别有用 从混合任务中访问您的数据库。谢天谢地,mix make 对我们来说真的很容易:
def run(_args) do Mix.Task.run "app.start" Mix.shell.info "Now I have access to Repo and other goodies!" ... end
答案 1 :(得分:1)
在Elixir 1.11中,您可以使用docs for Mix.Task
中所述的import pygame
from pygame.locals import *
from random import randint
width = 500
height = 200
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
MAGENTA = (255, 0, 255)
CYAN = (0, 255, 255)
BLACK = (0, 0, 0)
GRAY = (150, 150, 150)
WHITE = (255, 255, 255)
dir = {K_LEFT: (-5, 0), K_RIGHT: (5, 0), K_UP: (0, -5), K_DOWN: (0, 5)}
pygame.init()
screen = pygame.display.set_mode((width, height))
font = pygame.font.Font(None, 24)
running = True
模块属性:
@requirements
这等效于在@requirements ["app.start"]
函数中调用Mix.Task.run "app.start"
。