MCPcopy
hub / github.com/puma/puma-dev / LaunchApp

Method LaunchApp

dev/app.go:270–364  ·  view source on GitHub ↗
(name, dir string)

Source from the content-addressed store, hash-verified

268`
269
270func (pool *AppPool) LaunchApp(name, dir string) (*App, error) {
271 tmpDir := filepath.Join(dir, "tmp")
272 err := os.MkdirAll(tmpDir, 0755)
273 if err != nil {
274 return nil, err
275 }
276
277 socket := filepath.Join(tmpDir, fmt.Sprintf("puma-dev-%d.sock", os.Getpid()))
278
279 shell := os.Getenv("SHELL")
280
281 if shell == "" {
282 fmt.Printf("! SHELL env var not set, using /bin/bash by default")
283 shell = "/bin/bash"
284 }
285
286 cmd := exec.Command(shell, "-l", "-i", "-c",
287 fmt.Sprintf(executionShell, dir, name, socket, name, socket))
288
289 cmd.Dir = dir
290
291 cmd.Env = os.Environ()
292 cmd.Env = append(cmd.Env,
293 fmt.Sprintf("THREADS=%d", DefaultThreads),
294 "WORKERS=0",
295 "CONFIG=-",
296 )
297
298 stdout, err := cmd.StdoutPipe()
299 if err != nil {
300 return nil, err
301 }
302
303 cmd.Stderr = cmd.Stdout
304
305 err = cmd.Start()
306 if err != nil {
307 return nil, errors.Context(err, "starting app")
308 }
309
310 fmt.Printf("! Booting app '%s' on socket %s\n", name, socket)
311
312 app := &App{
313 Name: name,
314 Command: cmd,
315 Events: pool.Events,
316 stdout: stdout,
317 dir: dir,
318 pool: pool,
319 readyChan: make(chan struct{}),
320 lastUse: time.Now(),
321 }
322
323 app.eventAdd("booting_app", "socket", socket)
324
325 stat, err := os.Stat(filepath.Join(dir, "public"))
326 if err == nil {
327 app.Public = stat.IsDir()

Callers 1

lookupAppMethod · 0.95

Calls 2

eventAddMethod · 0.95
SetAddressMethod · 0.95

Tested by

no test coverage detected