Hello Phoenix! | 설치 방법
엘릭서와 언랭 설치
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를 사용한다.
로컬에 설치하는 방법
이 문서를 참고한다.
도커를 사용하는 방법
- 도커를 설치한 후 다음 명령어를 통해 도커를 실행한다.
docker run --name postgres -p 49302:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres -d postgres
- 개발 환경 변수를 설정하는 파일(
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"
- 개발 환경 변수를 설정하는 파일(
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
- 도커를 실행한다.
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