Cách quản lý Rails database.yml


82

Cách tốt nhất để xử lý Rails database.yml là gì nếu nhiều người đang làm việc trên dự án và các vị trí cơ sở dữ liệu khác nhau (đặc biệt là socket).


2
Làm rõ: Tôi muốn điều này làm việc với Capistrano, được kiểm tra từ svn nên tôi không nghĩ rằng bỏ qua các tác phẩm.
phillee 20/09/09

1
Tôi đã thêm hai bước nữa cho trường hợp Capistrano.
James A. Rosen

Câu trả lời:


160

Đầu tiên, chuyển database.ymlsang tệp mẫu.

Nếu bạn đang sử dụng Git:

git mv config/database.yml config/database.yml.example
git commit -m "moved database.yml to an example file"

Hoặc, nếu bạn đang ở trên Subversion:

svn move config/database.yml config/database.yml.example
svn ci -m "moved database.yml to an example file"

Thứ hai, bỏ qua phiên bản .yml.

Nếu bạn đang sử dụng Git:

cat > .gitignore
config/database.yml

git add .gitignore
git commit -m "ignored database.yml"

Nếu bạn đang ở trên Subversion:

svn propset svn:ignore config "database.yml"

Thứ ba, cài đặt database.yml của bạn ở đâu, anh bạn? :

script/plugin install git://github.com/technicalpickles/wheres-your-database-yml-dude

Plugin đó cảnh báo các nhà phát triển trước khi chạy bất kỳ tác vụ Rake nào nếu họ chưa tạo phiên bản cục bộ của riêng mình config/database.yml.

Thứ tư, thiết lập nhiệm vụ triển khai Capistrano:

# in RAILS_ROOT/config/deploy.rb:
after 'deploy:update_code', 'deploy:symlink_db'

namespace :deploy do
  desc "Symlinks the database.yml"
  task :symlink_db, :roles => :app do
    run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml"
  end
end

Thứ năm, tải lên phiên bản database.yml của máy chủ:

scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml

8
Theo thông lệ (mặc dù không bắt buộc) bạn phải "chấp nhận" câu trả lời mà bạn thấy hữu ích nhất. Tôi nghĩ bạn thậm chí nhận được một huy hiệu cho lần chấp nhận đầu tiên của bạn.
James A. Rosen 21/09/09

3
xấu của tôi - đã bình chọn nó nhưng không thấy séc. xong và cảm ơn bạn!
phillee 25/09/09

Tôi đã phải thay đổi sau 'deploy: update_code', 'deploy: symlink_db' thành trước 'deploy: asset: precompile', 'deploy: symlink_db' và sau đó nó hoạt động.
joshua.paling

Mọi thứ đều hoạt động, ngoại trừ bước thứ năm. Nó nói rằng không có thư mục như vậy, nhưng nó ở đó.
Sebastialonso

Chỉ là một lưu ý quan trọng, tôi khuyên bạn nên sử dụng cat >> .gitignorethay thế. Vì bạn sẽ thổi bay tập tin hiện tại của bạn bằng cách khác ...
sijpkes

16

Trong Capistrano 3, thay vì thêm nhiệm vụ mới, bạn chỉ có thể làm:

set :linked_files, %w{config/database.yml}



0

Ngoài các câu trả lời trên, tôi đã viết một tác vụ rake tương tự như "Where's your database.yml, dude?", Nhưng cho phép giữ lại các ví dụ mẫu của bất kỳ tệp cấu hình nào. Hãy khám phá: https://github.com/Velid/exemplify

Để thay thế cho việc viết các cấu hình sản xuất riêng biệt và liên kết chúng qua Capistrano, tôi cũng khuyên bạn nên sử dụng các biến môi trường cho thông tin đăng nhập của bạn:

password: <%= ENV['PROD_DATABASE_PASSWORD'] %>

Có rất nhiều công cụcách thức tiện dụng để thực hiện việc này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.