Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

RoR:làm cách nào để kiểm tra ứng dụng của tôi với nhiều cơ sở dữ liệu?

@awendt vui lòng chỉ ra rằng tôi có thể trả lời câu hỏi của riêng mình.

Nó chỉ ra công thức là khá đơn giản. Bí quyết là sử dụng một biến môi trường để cho Rails biết bạn muốn sử dụng db nào.

1. Sửa đổi tệp của bạn

Trong config/database.yml , bao gồm các cấu trúc ERB như sau:

test:
<% if (ENV["RAILS_DB"] == "PostgreSQL") %>
  adapter: postgresql
  encoding: unicode
  database: bd_test
  pool: 5
  username: <%= ENV['POSTGRESQL_USERNAME'] || 'root' %>
  password: <%= ENV['POSTGRESQL_PASSWORD'] || '' %>
<% elsif (ENV["RAILS_DB"] == "MySQL") %>
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: bd_test
  pool: 5
  username: <%= ENV['MYSQL_USERNAME'] || 'root' %>
  password: <%= ENV['MYSQL_PASSWORD'] || '' %>
  socket: <%= ENV['MYSQL_SOCKET'] || '/tmp/mysql.sock' %>
<% else %>
  # default to SQLite
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000
<% end %>

Lưu ý 1:Tôi chỉ hiển thị nó cho môi trường thử nghiệm. Trên thực tế, đó là cơ sở duy nhất mà tôi đã sửa đổi, vì (được cho là) ​​nó cung cấp đủ phạm vi để cho tôi biết liệu cả ba cơ sở dữ liệu có được hỗ trợ đúng cách hay không.

Lưu ý 2:Bạn không cần sử dụng các biến môi trường để đặt tên người dùng và mật khẩu - đó chỉ là điều tôi muốn làm vì nó tránh để lộ mật khẩu trong một tệp thường được xem.

Tương tự, hãy mở rộng Gemfile như sau (lưu ý rằng số phiên bản của bạn có thể thay đổi):

source 'http://rubygems.org'
gem 'rails', '3.0.3'
case ENV["RAILS_DB"]
when "PostgreSQL"
  gem 'pg', '0.10.0'
when "MySQL"
  gem 'mysql2'
else
  gem 'sqlite3', '1.3.3'
  gem 'sqlite3-ruby', '1.3.3', :require => 'sqlite3'
end
...

2. Thêm điều kiện vào mã của bạn

Bất chấp những nỗ lực tốt nhất của nhóm phát triển Rails, có một số điểm mà các cấu trúc ActiveRecord không tương thích trên tất cả các phiên bản của cơ sở dữ liệu. Trong những trường hợp này, bạn có thể điều chỉnh mã của mình trên ActiveRecord::Base.connection.adapter_name . Đây là một ví dụ từ một trong các tệp di chuyển của tôi:

file: migrate/20110129023453_create_cached_web_pages.rb

def self.up
  create_table :cached_web_pages do |t|
    t.string    :key             
    if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
      t.binary    :value
    else
      t.binary    :value, :limit => 16777215
    end
  end
end
...

3. Đang chạy và thử nghiệm

Giờ đây, bạn có thể chọn cơ sở dữ liệu chỉ bằng cách đặt biến môi trường RAILS_DB, nhưng có một vấn đề:bạn phải chạy bundle install mỗi lần để thiết lập bộ điều hợp cơ sở dữ liệu thích hợp từ Gemfile. May mắn thay, đó chính xác là những gì mã thử nghiệm làm. Vì vậy, ví dụ:tôi có thể chạy tính năng tự động kiểm tra của rspec trong hai cửa sổ:

$ RAILS_DB=SQLite autotest

$ RAILS_DB=PostgreSQL autotest

Giờ đây, tôi có thể lấy đi các tệp của mình và tính năng tự động kiểm tra sẽ âm thầm cảnh báo cho tôi nếu tôi đã làm hỏng bất kỳ thứ gì khi tôi tiếp tục.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ruby on Rails 3 Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/tmp/mysql.sock' trên OSX

  2. mysql cuộn cảm trên một số ký tự nhất định và mssql thì không

  3. cách tìm bản ghi đầu tiên và bản ghi cuối cùng từ bảng mysql

  4. MySQL Chọn THAM GIA 3 Bảng

  5. Làm thế nào để lấy kích thước của cơ sở dữ liệu mysql?