Giới thiệu về Elixir on Phoenix
I. GIới thiệu Có thể các bạn đã biết đến ngôn ngữ Erlang. Nó được thiết kế để đáp ứng yêu cầu high availability của hệ thống telecom, một hệ thống lớn mà có thể dễ dàng scale, khả năng chịu lỗi cao, giảm thiểu downtime tới mức thấp nhất có thể. Và giải pháp để thực hiện việc đó trong ngôn ngữ ...
I. GIới thiệu
Có thể các bạn đã biết đến ngôn ngữ Erlang. Nó được thiết kế để đáp ứng yêu cầu high availability của hệ thống telecom, một hệ thống lớn mà có thể dễ dàng scale, khả năng chịu lỗi cao, giảm thiểu downtime tới mức thấp nhất có thể. Và giải pháp để thực hiện việc đó trong ngôn ngữ Erlang chính là bằng cách chạy song song để tận dụng tối đa các tài nguyên của phần cứng.
Hay nói một cách khác thì: "Erlang đơn giản chỉ là một ngôn ngữ lập trình như bao ngôn ngữ khác. Điểm khác biệt duy nhất là nó được thiết kế với mục tiêu chạy song song để giúp tận dụng tối đa ưu thế của phần cứng máy tính. Điều này có nghĩa rằng, nếu máy tính của bạn có càng nhiều nhân (core) thì đồng nghĩa với việc chương trình của bạn sẽ chạy càng nhanh." (1)
Lợi ích của ngôn ngữ Erlang là khá rõ ràng, nhưng mà cú pháp của nó lại khó viết và khó hiểu, nên José đã phát triển Elixir dựa trên nền tảng của Erlang và thay đổi cú pháp của nó để cho nó gần giống với ngôn ngữ tự nhiên hơn. Chính vì vậy mà Elixir có được những lợi ích của Erlang mà lại có cú pháp dễ đọc, dễ hiểu hơn rất nhiều.
II. Cài đặt
Các bạn có thể cài đặt theo link hướng dẫn tại đây Mình sử dụng ubuntu để hướng dẫn nên sẽ cài đặt với terminal như sau:
Thêm Erlang Solutions repo và update
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb sudo apt-get update
Cài đặt Erlang/OTP platform và các ứng dụng
sudo apt-get install esl-erlang
Cài đặt Elixir:
sudo apt-get install elixir
Cài đặt Phoenix
mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez
Note: Nếu lệnh trên không cài đặt phoenix thì bạn có thể tải tại Phoenix archives, sau đó chạy mix archive.install /path/to/local/phoenix_new.ez
III. Cơ bản về elixir
Để chạy được các tương tác với Elixir trên shell ta có 2 cách để chạy.
- iex (Interactive Elixir)
- run script
III.1 iex
Các bạn mở terminal và gõ iex ở bất cứ đâu thì đều bật được giao diện thao tác với Elixir như dưới
itachi@itachi:~/git$ iex Erlang/OTP 19 [erts-8.1] [source-4cc2ce3] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] Interactive Elixir (1.3.3) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> "Le Van Ban" <> "- Hello Elixir" "Le Van Ban- Hello Elixir" iex(2)> 5 + 5 + 5 15 iex(3)>
III.2 Run script
Tạo một file có đuôi là .exs sau đó chạy elixir /path/to/file.exs
VD: Tạo 1 file là example.exs nội dung như bên dưới
IO.puts 5 + 5 + 5 IO.puts "Hello world"
Sau đo chạy elixir example.exs (ở terminarl chứ ko phải trong iex ta có kết quả:
itachi@itachi:~/git$ elixir example.exs Le Van Ban- Hello Elixir 15
III.3 Các kiểu dữ liệu và phương thức cơ bản
Trong Elixir thì có các kiểu dữ liệu cơ bản sau:
iex> 2 # integer iex> 2.5 # float iex> true # boolean iex> :atom # atom / symbol iex> "elixir" # string iex> [1, 2, 3] # list iex> {1, 2, 3} # tuple
Với integer thì Elixir có hỗ trợ convert từ hệ binary, octal and hexa sang hệ thập phân một cách nhanh chóng.
iex> 0b1111 # binary 15 iex> 0o111 # octal 73 iex> 0x111 # hexa 273
Với kiểu float thì Elixir hỗ trợ viết theo kiểu lũy thừa cơ số 10 với chữ e. Lưu ý: Kiểu viết này không hỗ trợ kiểu integer
iex> 2.0e2 200.0 iex> 2.0e-2 0.02 iex> 2e-2 ** (SyntaxError) iex:31: syntax error before: e
Đối với các phép toán cơ bản thì Elixir nó khác với ruby ở chỗ là với 2 biến integer thực hiện phép chia thì sẽ trả ra kết quả là integer hoặc float tùy theo kết quả. Nhưng với ruby thì chỉ trả ra integer
Ruby 5 / 2 = 2
Elixir 5 / 2 = 2.5
Đối với các kiểu dữ liệu cơ bản này thì Elixir cung cấp các hàm để nhận biết xem dữ liệu đó có phải là kiểu mà mình muốn hay không:
iex(31)> is_integer 1 true iex(32)> is_integer(1) true iex(33)> is_boolean(true) true iex(34)> is_atom(:atom) true
Nhưng với kiểu String thì chỉ có thể check theo binary
iex(36)> is_binary("string") true
Có rất nhiều các hàm cơ bản, các bạn có thể tham khảo thêm tại đây
IV. Tạo ứng dụng với Phoenix
Dưới đây là các bước lần lượt để tạo một project với Phoenix lần đầu tiên. Đối với phoenix thì khi tạo project thì sẽ khởi tạo mặc định luôn database. Và adapter default của phoneix chính là PostgreSQL.
mix phoenix.new /Users/me/work/elixir-stuff/hello_phoenix # chỉ rõ path mix phoenix.new hello_phoenix # forder hiện tại
Hiện tại thì mình sử dụng MySQl nên mình chỉ rõ ra adapter cho database
mix phoenix.new hello_phoenix --database mysql
Đối với cả 2 adapter trên thì đều tạo ra file config/dev.exs để config database với môi trường development. Tương tự với file config/test.exs là môi trường test và config/prod.secret.exs là production.
... # Configure your database config :hello_phoenix, HelloPhoenix.Repo, adapter: Ecto.Adapters.MySQL, username: "root", password: "", database: "hello_phoenix_dev", hostname: "localhost", pool_size: 10
Sau đó ta chạy lệnh
- mix do deps.get, compile #để lấy các dependency về và compile.
- mix ecto.create # Tạo database
Ngoài ra thì chúng ta cần cài node chạy brunch để build assets hoặc dùng yarm của face book. Hoặc cũng có thể bỏ qua bước đó thì khi nào project ta thêm các option như sau:
mix phoenix.new web --no-brunch --no-ecto
Tất cả đã xong giờ chỉ việc khởi động server và xem kết quả với lệnh sau:
mix phoenix.server
Source code: hello_phoenix