Quản lý toàn bộ biến môi trường của dự án tại 1 nơi bằng gem Figaro
Về cơ bản 1 dự án Rails tại Framgia, khi bắt đầu các bạn hay phải làm những điều sau đây:1. Động cơ
2. Workflow nếu KHÔNG dùng Figaro
rails new
database.yml
vào .gitignore
, sau đó duplicate file này lên để tạo fie template database.yml.example
rake secret
tạo key, lại ngậm ngùi vào folder config
tạo secrets.yml.template
(vâng lại là template), duplicate file này lên để tạo file secrets.yml
, điền thông tin cần thiết vào rồi đưa file này vào trong .gitignore
để lại giấu nó đi.3. Workflow nếu dùng Figaro
figaro
vào Gemfileapplication.yml
đã được tạo ra cho bạn và file này cũng được tự động đưa vào .gitignore
. Do theo chuẩn yml cho nên việc thêm các trường key và value rất thân thuộc, ngoài ra cách gọi cũng không thể đơn giản hơn ENV["{tên_key}"]
hoặc Figaro.env.{tên_key}
. Chấm hếtdatabase.yml
, secrets.yml
, application.yml.example
mà bạn chuẩn hoá để sử dụng trong tất cả các dự án từ nay về sau.
Ví dụ:
- database.yml1234567891011121314common: &commonadapter: mysql2encoding: utf8mb4collation: utf8mb4_binusername: <%= Figaro.env.database_username %>password: <%= Figaro.env.database_password %>reconnect: <%= Figaro.env.database_reconnect %>pool: <%= Figaro.env.database_pool %>host: <%= Figaro.env.database_host %>database: <%= Figaro.env.database_name %>development:<<: *commonproduction:<<: *common
- secrets.yml123456common: &commonsecret_key_base: <%= Figaro.env.secret_key_base %>development:<<: *commonproduction:<<: *common
- application.yml.example1234567891011121314151617181920secret_key_base:database_username:database_password:database_reconnect:database_host:database_pool:database_name:mail_username:mail_password:production:secret_key_base:devise_key_base:database_username:database_password:database_reconnect:database_host:database_pool:database_name:mail_username:mail_password:
config
của dự án (file application.yml.example – sẽ giúp các đồng đội khác dễ dàng trong việc setup biến môi trường của dự án)application.yml
theo format của application.yml.example
.4. Kết luận
Theo tư tưởng Convention over configuration
của Rails, việc chuẩn hoá và giúp dev không mất công trong việc suy nghĩ và đưa ra nhiều quyết định (mà không làm giảm độ linh hoạt trong dự án) là ý tưởng của tôi khi quyết định đến với Figaro. Bằng việc sử dụng Figaro sẽ giúp các bạn bắt đầu 1 dự án dễ dàng và đỡ mất thời gian hơn, chuẩn hoá các dự án cũng như điều quan trọng nhất chính là có một nơi quản lý hiệu quả, giúp các bạn không cần lo nghĩ về việc quản lý các thông tin biến quan trọng trong dự án theo từng môi trường nữa. Đây chỉ là bài viết trình bày ý tưởng và mong các bạn có chút quan tâm tới Figaro, chi tiết hơn các bạn có thể xem trên Github của gem.
5. Vấn đề gặp phải
Đây chỉ là 1 vấn đề nhỏ, tuy nhiên tôi đã gặp khi sử dụng Rubymine. Rubymine tích hợp việc kết nối Database của dự án trong IDE của mình, dựa vào file database.yml
để login vào db luôn. Tuy nhiên do đã đưa các thông số này vào application.yml
do vậy gặp lỗi login. Mong các anh tài Rubymine sẽ sửa sớm.
Cám ơn các bạn đã xem bài viết
ITZone via Viblo