black and white computer keyboard

Ruby On Rails: Cách fix lỗi “ArgumentError: key must be 16 bytes”

Lý do xảy ra lỗi này là gì ?

RAILS_MASTER_KEY cần phải có ĐỘ DÀI CHÍNH XÁC 32 kí tự, KHÔNG CÓ DÒNG MỚI Ở CUỐI FILE, KHÔNG CÓ DẤU KẾT THÚC DÒNG
Nếu chạy lệnh “rails secret” để tạo chuỗi secret trong Rails, thì câu lệnh sẽ tạo ra 1 chuỗi có độ dài 128 kí tự, điều này không đáp ứng điều kiện bên trên nên lỗi xảy ra.

Chi tiết và cách để tái hiện lỗi đã được “còm mên” chi tiết ở github issue
https://github.com/rails/rails/issues/33528#issuecomment-412677795

Đây là lỗi ở Rails 5, lỗi này đã được fix ở bản Rails 6 (bản mới nhất ở thời điểm viết bài này), nhưng nhiều khi bạn đang phải làm việc với các dự án vẫn dùng Rails 5 như mình thì có thể gặp lỗi này.

Triển thôi !

  1. Đầu tiên hãy kiểm tra độ dài của fike “master.key” của mình
wc -c config/master.key

# Ouput
32 config/master.key # This is OK !

# TH độ dài không phải 32
33 config/master.key # oh ... This is not good !
  1. Trong trường hợp nó dài hơn 32 kí tự (33 trở lên …), kiểm tra nội dung file “master.key” xem nào
cat config/master.key

# Output
abcdef123456abcdef123456abcdef12

Chỗ này mình đếm bằng “thiên lý nhãn” của mình thì thấy chỉ có 32 kí tự … Cái quờ quờ gì vậy ?

Như đã nói ở trên, có thể trong file mình có DÒNG MỚI hoặc DẤU KẾT THÚC DÒNG …

Giải pháp 1: Xóa file “master.key”, tạo lại file khác với CHÍNH XÁC 32 kí tự

# Xóa key cũ
rm config/master.key

# Tạo key mới
echo "abcdef123456abcdef123456abcdef12" > "config/master.key"

Giờ thì chạy thôi chứ còn lỗi phải gì nữa !

EDITOR=vim rails credentials:edit

Giải pháp 2: Set biến môi trường (ENV variable) “RAILS_MASTER_KEY” cũng bằng 32 kí tự

export RAILS_MASTER_KEY=abcdef123456abcdef123456abcdef12

Giờ thì chạy thôi chứ còn lỗi phải gì nữa !

EDITOR=vim rails credentials:edit

Nhưng kiểu gì thì cũng khuyến khích anh em dùng cách 1, sửa 1 lần rồi thôi

Kết

Hi vọng là post này có ích cho bạn nếu bạn gặp lỗi trên.

Happy coding !

Chia sẻ qua: