2010-11-08 21 views
6

Giả sử bạn muốn hiển thị mã nguồn cho tệp cài đặt nhưng không muốn 3-4 dòng hiển thị trong mã nguồn công khai. Bạn chỉ cần thay thế các biến đó theo cách thủ công hoặc có một số thủ thuật bạn sử dụng, như đưa chúng vào một tệp riêng biệt khác và bao gồm cả tệp đó trong conf chính?Làm cách nào để quản lý thông tin đăng nhập khỏi mã nguồn có thể xem công khai?

Hoặc thông thường hơn là không theo dõi và bao gồm tệp đó trong repo?

Trả lời

6

Cách tôi giải quyết vấn đề này và tôi phải giải quyết vấn đề này trong hầu hết mọi dự án mà tôi đang làm, bằng cách sử dụng mẫu mà tôi đã chọn từ một người nào đó. Trong mẫu này - không chỉ có thể được sử dụng để giữ thông tin không bị kiểm soát phiên bản mà còn để tách biệt các cài đặt cụ thể cho môi trường/nền tảng - tệp cài đặt chính, nằm dưới sự kiểm soát phiên bản, hãy nhập tệp cài đặt thứ cấp được gọi là "local_settings". Tệp "local_settings" này không được đặt dưới sự kiểm soát phiên bản và cho mỗi nền tảng mà nguồn được triển khai, một tệp local_settings riêng biệt, cụ thể được tạo phù hợp với nền tảng đó.

Tôi sẽ cung cấp cho bạn một ví dụ về cách tôi thường làm điều này cho các dự án Django/Python của mình. Có một tệp trung tâm, mỗi dự án settings.py, dưới sự kiểm soát phiên bản và nền tảng (có lẽ nền tảng không phải là thuật ngữ phù hợp để sử dụng tại đây) tệp local_settings.py cụ thể. Các tập tin local_settings.py được nhập khẩu từ bên trong settings.py tập tin, nơi các biến môi trường khác được quy định trong các cách sau đây:

import local_settings 

DATABASE_USER = local_settings.db_user 
DATABASE_PASSWORD = local_settings.db_pass 

Và, như một ví dụ để đi cùng với đoạn mã trên, các tập tin local_settings.py được định nghĩa như sau:

db_user = 'user' 
db_pass = 'pass' 

Tôi đã tìm thấy mẫu này khi xử lý vấn đề được đề cập để hoạt động thực sự tốt.

+0

Điều này có vẻ giống như một kỹ thuật khá đẹp, tôi sẽ bắt đầu sử dụng nó. Bạn có nhớ cung cấp ví dụ về mã nguồn 'local_settings.py' không? –

+0

ở dưới cùng của settings.py Django của bạn trong kiểm soát nguồn bạn làm điều này: thử: từ settings_local nhập khẩu * ngoại trừ ImportError: vượt qua –

+0

Hey Spike. Tôi nghĩ rằng trong trường hợp tệp 'local_settings.py' bị thiếu, thường là một ý tưởng hay để cho ngoại lệ gây ra do nhập một tệp/bong bóng mô-đun bị thiếu để người thiết lập dự án biết chính xác những gì đang xảy ra. – ayaz

4

Tùy thuộc vào ngữ cảnh, nhưng giải pháp phổ biến là có application.cfg.sample không chứa thông tin nhạy cảm. Tệp này nằm trong kho lưu trữ, v.v. Khi bạn thực sự triển khai ứng dụng, bạn sao chép tệp đó vào application.cfg và chỉnh sửa mật khẩu, v.v.

Một cách tiếp cận khác là để cho các giá trị ví dụ hoạt động cho sự phát triển của bạn, nhưng vô nghĩa , ví dụ:

host: localhost 
username: user 
password: test 

Đây có thể là tài khoản cơ sở dữ liệu hợp lệ hoặc bất kỳ nơi nào trên máy phát triển của bạn, nhưng người dùng không cho rằng thông tin đó không nhạy cảm.

3

Chỉ cần thay thế các biến bằng các biến mẫu.

SETTINGS = { 
    username: 'test', 
    password: 'mypass' 
} 

, vv

+0

Điều gì sẽ xảy ra nếu bạn có bản sao cục bộ mà bạn đẩy tới máy chủ sản xuất? Bạn sẽ đẩy tất cả mọi thứ trừ tệp cài đặt nếu bạn vừa cập nhật? Hoặc nếu bạn thêm một thiết lập vào kho lưu trữ cục bộ của bạn là cần thiết khi bạn đẩy nó đến remote? –

+0

1) Vâng, tôi sẽ. 2) Thêm cài đặt giả cho biến đó. Nếu bạn thấy mình thêm nhiều cài đặt mới, có thể bạn đã không thiết kế rất tốt. –

2

Bạn có thể hoặc không kiểm tra các tập tin trong, nếu chỉ có một thiết lập giá trị của nó đối với một cấu hình địa phương có thực sự là không có điểm để đưa nó vào trong mã nguồn công cộng hay làm điều thông minh và mã hóa thông tin (trong trường hợp tệp cài đặt asp).

Các vấn đề liên quan