Got error loading .env

andresuchdataTRIAL

5 months ago

I got error: "2024/11/21 14:41:12 Error loading .env file"

Currently using Go and Dockerfile.

Dockerfile content:

Build stage

FROM golang:1.23.3-alpine AS builder

WORKDIR /app

RUN apk add --no-cache gcc musl-dev

COPY go.mod go.sum ./

RUN go mod download

COPY . .

RUN go build -o main .

Final stage

FROM alpine:latest

WORKDIR /app

Copy binary from builder

COPY --from=builder /app/main .

Set default PORT environment variable (optional)

ENV PORT=8080

Expose the port specified by the PORT environment variable

EXPOSE $PORT

Run the binary directly instead of start.sh

CMD ["./main"]

main.go

func getEnv(key string, defaultValue string) string {
    value := os.Getenv(key)
    if value == "" {
        return defaultValue
    }
    return value
}

func main() {
    env := getEnv("ENV", "dev")

    // Do not load .env file in Railway production
    if _, exists := os.LookupEnv("RAILWAY_ENVIRONMENT"); !exists {
        if err := godotenv.Load(); err != nil {
            log.Fatal("error loading .env file:", err)
        }
    }

    // Initialize logger
    var logger *slog.Logger

    if env == "prod" {
        logger = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
            Level: slog.LevelInfo,
        }))
    } else {
        logger = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
            Level: slog.LevelDebug,
        }))
    }
    utils.SetLogger(logger)

    e := echo.New()
    e.Validator = utils.NewCustomValidator()

    // Initialize DB connection
    var connStr string

    // Check for Railway's DATABASE_URL
    if dbURL := getEnv("DATABASE_URL", ""); dbURL != "" {
        connStr = dbURL
    } else {
        // Fallback to individual connection parameters
        connStr = fmt.Sprintf(
            "postgres://%s:%s@%s:%s/%s?sslmode=%s",
            getEnv("DB_USER", ""),
            getEnv("DB_PASSWORD", ""),
            getEnv("DB_HOST", ""),
            getEnv("DB_PORT", ""),
            getEnv("DB_NAME", ""),
            getEnv("DB_SSLMODE", ""),
        )
    }

    db, err := sql.Open("postgres", connStr)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // Run migrations
    if err := migrate.RunMigrations(db, "db/migrations"); err != nil {
        log.Fatal(err)
    }

    // Initialize repository with DB connection
    userRepo := repository.NewUserRepository(db)
    passwordResetTokenRepo := repository.NewPasswordResetTokenRepository(db)

    userService := service.NewUserService(userRepo, passwordResetTokenRepo)
    userHandler := handler.NewUserHandler(userService)

    // Register routes
    handler.RegisterRoutes(e, &handler.RouteConfig{
        UserHandler:    userHandler,
        AuthMiddleware: handler.AuthMiddleware,
        BaseMiddleware: []echo.MiddlewareFunc{
            handler.RequestLoggerMiddleware,
            handler.ErrorCodeHandlingMiddleware,
        },
    })

    // Start the server using environment variable for port
    port := getEnv("PORT", "8080")

    fmt.Println("Env port", port)
    e.Logger.Fatal(e.Start(":" + port))

}

View Deploy details

ⓘ Deployment information is only viewable by project members and Railway employees.

Solved

0 Replies

Status changed to Solved brody 5 months ago


Got error loading .env - Railway Help Station