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
1. Động cơ Hiện mình đang được tham gia một dự án Rails và cảm thấy rất háo hức khi được tìm hiểu, học hỏi những kiến thức mới sau một quãng thời gian dài không được đụng tay tới. Do đặc điểm hơn một năm vừa qua không được trực tiếp đụng tay tới việc code, mình để ý hơn tới những kỹ thuật làm ...
1. Động cơ
- Hiện mình đang được tham gia một dự án Rails và cảm thấy rất háo hức khi được tìm hiểu, học hỏi những kiến thức mới sau một quãng thời gian dài không được đụng tay tới.
- Do đặc điểm hơn một năm vừa qua không được trực tiếp đụng tay tới việc code, mình để ý hơn tới những kỹ thuật làm sao để dự án được bắt đầu và diễn ra một cách trơn tru và mượt mà hơn.
- Một dự án Rails luôn có rất nhiều thông tin cần được giấu tại local và không để cho người ngoài biết, việc quản lý làm sao cho hiệu quả là điều mình trăn trở cho đến khi biết tới gem Figaro.
- Sử dụng gem Figaro có thể giúp bạn chuẩn hoá toàn bộ các dự án tham gia một cách dễ dàng
2. Workflow nếu KHÔNG dùng 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:
- Tạo 1 dự án Rails bằng rails new
- Cho database.yml vào .gitignore, sau đó duplicate file này lên để tạo fie template database.yml.example
- Do cần secret key cho Rails app, sau khi dùng 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.
- Ngoài ra là rất nhiều biến môi trường khác nữa như secret key cho devise, thông tin về tài khoản email sẽ sử dụng để bắn mail...
3. Workflow nếu dùng Figaro
- Xem qua tài liệu về gem Figaro thôi. Cách sử dụng:
- add figaro vào Gemfile
- bundle install
- bundle exec figaro install
- vâng thật đơn giản qua 3 bước cơ bản, 1 file tên application.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ết
- Nếu là lần đầu tiên sử dụng, hãy tạo 1 folder bất kỳ, trong đó sẽ chứa file database.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.yml
common: &common adapter: mysql2 encoding: utf8mb4 collation: utf8mb4_bin username: <%= 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: <<: *common production: <<: *common
- secrets.yml
common: &common secret_key_base: <%= Figaro.env.secret_key_base %> development: <<: *common production: <<: *common
- application.yml.example
secret_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:
- Copy 3 file trên vào folder 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)
- Điền các thông tin cần thiết vào file application.yml theo format của application.yml.example.
- Mọi thứ đã sẵn sàng cho bạn.
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