dev

Hello Phoenix! | 설치 방법

Wonny (워니)
Wonny (워니)·2022년 08월 13일 05:47

엘릭서와 언랭 설치

asdf 사용하여 설치한다. 설치 방법은 이 문서에 잘 정리되어 있다.

엘릭서 코드는 언랭 바이트 코드로 컴파일되고, 컴파일된 코드가 언랭 가상 머신에서 실행되므로 엘릭서와 언랭을 모두 설치해야 한다.

hex 설치

mix local.hex

hex는 npm과 같은 엘릭서/언랭 패키지 매니저

피닉스 설치

피닉스 어플리케이션 제너레이터 설치

mix archive.install hex phx_new

다음과 같이 phx.new 명령어를 사용하여 어플리케이션을 생성할 수 있고, 명령어 옵션에 대한 설명은 mix help hpx.new 명령어로 볼 수 있다.

# Create a new application mix phx.new application_name # Show detailed description of hpx.new mix help hpx.new

데이터베이스 설정

피닉스는 기본적으로 PostgreSQL을 사용하도록 설정되어 있다. 어플리케이션 생성 시 --database 플래그로 다른 데이터베이스를 설정할 수도 있다.

mix phx.new application_name --database mysql

데이터베이스를 다루기 위해 또 다른 엘릭서 패키지인 ecto를 사용한다. 만일 어플리케이션에서 데이터베이스를 사용하지 않을 거라면 --no-ecto 플래그를 사용한다.

mix phx.new application_name --no-ecto

PostgreSQL 설치

로컬에 PostgreSQL를 설치하거나 도커를 사용하여 PostgreSQL를 사용한다.

로컬에 설치하는 방법

이 문서를 참고한다.

도커를 사용하는 방법

  1. 도커를 설치한 후 다음 명령어를 통해 도커를 실행한다.
docker run --name postgres -p 49302:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres -d postgres
  1. 개발 환경 변수를 설정하는 파일(dev.exs, test.exs)에서 데이터베이스 정보에 명령어에서 설정한 정보로 변경해준다.
# dev.exs or test.exs config :phoenix_practice, PhoenixPractice.Repo, username: "postgres", password: "postgres", hostname: "localhost", port: 49302, database: "postgres", stacktrace: true, show_sensitive_data_on_connection_error: true, pool_size: 10
docker-compose를 이용하여 실행하는 방법1. 프로젝트 루트에 `docker-compose.yaml` 파일을 생성한다. version: "3.8" services: postgres: image: postgres:14.2 environment: POSTGRES_PASSWORD: postgres ports: - "45432:5432"
  1. 개발 환경 변수를 설정하는 파일(dev.exs, test.exs)에서 데이터베이스 정보에 docker-compose.yaml에 작성한 포트 번호를 추가해준다. 위의 코드 같은 경우에는 45432 포트이다.
# dev.exs or test.exs config :db_test, DbTest.Repo, username: "postgres", password: "postgres", hostname: "localhost", port: 45432, database: "db_test_test#{System.get_env("MIX_TEST_PARTITION")}", pool: Ecto.Adapters.SQL.Sandbox, pool_size: 10
  1. 도커를 실행한다.
docker compose up # 현재 터미널이 아닌 백그라운드에서 실행하고 싶을 때 docker compose up -d

Hello Phoenix

피닉스 어플리케이션 생성

mix phx.new application_name
  • 어플리케이션 이름은 영어 소문자, 숫자, 언더바(_)로만 구성되어야 한다.
  • 피닉스는 git 사용을 추천하므로 어플리케이션 생성 시 .gitignore를 함께 생성한다.

데이터베이스 설정

피닉스는 PostgreSQL 데이터베이스 정보를 기본적으로 다음과 같이 설정해놨다. 만일 데이터베이스 정보나 계정 정보를 바꾸고 싶다면 mix ecto.create 명령어 관련 설정이 필요하다.

# dev.exs config :db_test, DbTest.Repo, username: "postgres", password: "postgres", hostname: "localhost", database: "postgres", stacktrace: true, show_sensitive_data_on_connection_error: true, pool_size: 10

데이터베이스 생성

mix ecto.create

실행하기

# Install deps mix deps.get # Run the server mix phx.server # Run on IEx iex -S mix phx.server

IEx에서 실행하면 터미널에서 함수 호출 등 엘릭서 코드를 사용할 수 있다.

트러블 슈팅

위와 같이 피닉스 어플리케이션을 실행하는 경우 다음과 같은 경고가 나온다.

warning: the :gettext compiler is no longer required in your mix.exs.

경고 로그에 나온 것처럼 mix.exs 파일에서 다음과 같이 컴파일러 설정 부분에 [:gettext] ++를 삭제해주면 된다. 정확히 어떤 이유로 이 부분만 삭제해주면 되는 것인지는 이후에 알아봐야 할 거 같다. 현재 지식으로는 잘 모르겠다.

# mix.exs defmodule PhoenixProject.MixProject do use Mix.Project def project do [ app: :phoenix_project, version: "0.1.0", elixir: "~> 1.12", elixirc_paths: elixirc_paths(Mix.env()), compilers: Mix.compilers(), # here start_permanent: Mix.env() == :prod, aliases: aliases(), deps: deps() ] end ... end

dev
elixir
phoenix
© 2020 Wonny.