我並不想檢查我的生產用戶名和密碼的版本控制用於安全目的。如果我確實檢查了它,每個人都可以看到它。這是因爲它是簽入版本控制database.yml文件:導入外部文件到database.yml文件
# /config/database.yml:
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: desk_production
pool: 5
username: root
password: password_here
正如你所看到的,「password_here」被選中作爲密碼 - 但這是如果有的話覈對生產數據庫的密碼無效。除了檢查我的活密碼進入版本控制之外,我基本上有兩種選擇:
- 將生產服務器上的真實database.yml文件保存在應用程序根目錄之上的目錄中。在應用程序部署時,製作一個capistrano配方爲該文件創建一個符號lync - 這將基本上覆蓋已簽入版本控制的database.yml文件。
- 保存真正的database.yml文件(就像在選項#1中一樣),但不是創建符號的lync,而是將其導入到database.yml文件中,並將其檢入版本控制。這將允許系統在每次部署應用程序時引用服務器上的現有文件,而不需要部署人員擔心更改密碼或創建符號化的lyncs。另外,我可以有永久的database.yml文件,它保留在服務器上,因此部署者看不到它...
我最喜歡第二個選項,它基本上看起來像這樣:
# Config file permanently stored on the web server:
# ../app_root/database.yml (notice this is one level up from the app so it doesn't get written over)
# This is the file checked into version control:
production:
<< ../app_root/database.yml
這不是普遍認爲'.yml'文件可以包含僱員再培訓局的情況下。 Rails [把'database.yml'的內容通過erb解析爲Yaml之前](https://github.com/rails/rails/blob/v3.2.8/railties/lib/rails/application/configuration.rb# L110-116)。 – matt
@normalcity - 這是一個很酷的解決方案,我沒有想到這個方向,但感謝你提供一個替代解決方案! – dingalingchickenwiing
@matt - 感謝erb/yaml解析的解釋!非常好的信息,我沒有意識到這一點... – dingalingchickenwiing