2013-06-17 7 views
8

Như bạn đã biết, bạn PHẢI cung cấp tên cơ sở dữ liệu, tên người dùng và mật khẩu chính xác cho cơ sở dữ liệu trong tệp config/database.yml hoặc ứng dụng Rails của bạn sẽ từ chối hoạt động.Đảm bảo cung cấp mật khẩu cơ sở dữ liệu trong ứng dụng Rails

Trong thiết lập mặc định, mật khẩu của bạn ở dạng văn bản thuần túy trong tệp config/database.yml. Nếu ứng dụng của bạn nằm trong kho lưu trữ GitHub miễn phí thì mật khẩu của bạn là thông tin công khai. Đây không phải là một lựa chọn khả thi cho một ứng dụng nghiêm túc. (Nó là OK cho một bài tập hướng dẫn, miễn là bạn không sử dụng mật khẩu này cho bất cứ điều gì khác.)

Tôi có một giải pháp đã làm việc cho tôi cho đến nay, nhưng tôi tự hỏi nếu có cái gì tốt hơn. Bạn có thể xem ví dụ được triển khai của tôi tại https://github.com/jhsu802701/bsf.

Việc tôi làm là thiết lập tệp config/database.yml để cung cấp tên người dùng và mật khẩu cho môi trường phát triển theo chương trình. Đối với môi trường phát triển, tôi thêm các lệnh vào tập lệnh config/database.yml để có được tên người dùng môi trường phát triển (tên người dùng thông thường của tôi cho thiết lập Debian Linux mà tôi sử dụng) và một mật khẩu trống. Đối với môi trường sản xuất, tôi thêm một lệnh trong kịch bản triển khai để lấy tên người dùng và mật khẩu từ các tệp khác ở tài khoản của tôi và ghi thông tin này vào tệp config/database.yml.

Có giải pháp nào tốt hơn không?

Có đá quý Ruby bao gồm điều này không? Nếu không, tôi đang nghĩ đến việc tạo ra một cái.

Trả lời

16

Cách mà Heroku hiện nó, và một phần lớn của đường ray khác cửa hàng với các biến ENV

xuất khẩu hai biến môi trường của bạn,

export POSTGRES_USERNAME='username' 
export POSTGRES_PASSWORD='password' 

sau đó trong database.yml của bạn tập tin bạn có thể làm

username: <%= ENV['POSTGRES_USERNAME'] %> 
password: <%= ENV['POSTGRES_PASSWORD'] %> 
4

Đây là cách tôi làm cho nó hoạt:

Mở terminal/cmd:

heroku config:set YOUR_DATABASE_PASSWORD=passywordy 

Sau đó, trong /config/database.yml tệp;

production: 
<<: *default 
password: <%= ENV['YOUR_DATABASE_PASSWORD'] %> 

(khu vực mật khẩu này được tự động tạo ra khi tôi sử dụng đường ray mới my_app postgresql -d)

1

On khác hơn Heroku xuất bạn biến môi trường hệ thống (Linux) bằng cách gõ bash export KEY=value Sau đó, bạn có thể gọi nó bằng Rails theo số ENV['KEY']

ví dụ
trong bash:
export CMS_DATABASE_PASSWORD=MySecurePassword
trong secrets.yml:
password: <%= ENV['CMS_DATABASE_PASSWORD'] %>

0

Thiết lập biến môi trường như mô tả trong bài viết hiện có trên, sẽ chỉ tồn tại các biến môi trường trong suốt thời gian của phiên shell hiện hành.

Để đặt biến môi trường vĩnh viễn, các hướng dẫn export sẽ được thêm vào tệp cấu hình trình bao của bạn. (Sau đó chạy source ~/.bashrc để áp dụng những thay đổi cho phiên hiện tại của bạn)

TL; DR: Nếu bạn đang sử dụng BASH, thêm export hướng dẫn (s) để ~/.bashrc.

Trong khi ở trên là đủ (nếu sử dụng BASH trên hầu hết các bản phân phối Linux phổ biến), tự tin xác định tệp cấu hình nào cần cập nhật cho trình bao của bạn có thể khá phức tạp. Bài viết sau đây giải thích lý do tại sao và cung cấp hướng dẫn về tệp cấu hình cần chỉnh sửa.

https://unix.stackexchange.com/questions/117467/how-to-permanently-set-environmental-variables