Wednesday, 29 March 2017

Phải set locale trong Upstart

Upstart là init system của Ubuntu trước 16.04.
Nếu còn dùng upstart, khi viết file cấu hình cho nó trong /etc/init/xyz.conf bạn phải set locale cho nó vì mặc định, upstart không sử dụng biến môi trường nào ngoài TERM và PATH.


http://upstart.ubuntu.com/cookbook/#job-environment

Nếu không set locale, một vấn đề có thể gặp phải, ví dụ như khi bạn chạy code python bằng gunicorn, thông qua upstart. Function os.path.isfile có thể raise Exception khi nhận tên file là một đoạn string chứa kỹ tự không nằm trong bảng mã ASCII:
if os.path.isfile(content_string) and not is_raw:
     File "/usr/local/pymi/env/lib/python3.4/genericpath.py", line 30, in isfile
        st = os.stat(path)
UnicodeEncodeError: 'ascii' codec can't encode character '\xfa' in position 2: ordinal not in range(128)
Thêm dòng này vào file upstart:

env LANG=en_US.UTF-8
env LC_CTYPE="en_US.UTF-8"
env LC_ALL=en_US.UTF-8
Kiểm tra locale trên Python:

$ python3
>>> import locale
>>> locale.getlocale()
('en_US', 'UTF-8')

Hết.
HVN at http://www.familug.org/ and http://pymi.vn

Đăng ký học #Python , lớp tại chi nhánh #HàNội khai giảng giữa tháng 4, 2017: https://pymi.vn/

Nhập email vào http://invite.pymi.vn/ để nhận thư mời tham gia forum hỏi đáp Python, Django, Golang, Linux ...