📅  最后修改于: 2023-12-03 15:34:37.162000             🧑  作者: Mango
在 Rails 应用程序中使用远程数据库可以提供许多优势,例如访问外部数据、横向扩展和数据共享等。这篇教程将向您介绍使用 Ruby on Rails 应用程序连接到远程数据库的几种方法。
通过 TCP/IP 连接,您可以在 Rails 应用程序中访问远程 MySQL、Oracle、PostgreSQL 和 SQL Server 数据库。这里以 MySQL 为例。
在 Gemfile
中添加 mysql2
gem:
gem 'mysql2'
安装 gem:
bundle install
创建数据库配置 config/database.yml
文件:
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: REPLACE_WITH_USERNAME # 替换为远程 MySQL 数据库用户名
password: REPLACE_WITH_PASSWORD # 替换为远程 MySQL 数据库密码
host: REPLACE_WITH_HOSTNAME_OR_IP_ADDRESS # 替换为远程 MySQL 数据库主机名或 IP 地址
development:
<<: *default
database: REPLACE_WITH_DATABASE_NAME # 替换为远程 MySQL 数据库名称
test:
<<: *default
database: REPLACE_WITH_DATABASE_NAME # 替换为远程 MySQL 数据库名称
请务必替换 MySQL 数据库用户名、密码、主机名或 IP 地址和数据库名称。
通过 SSH 隧道连接,您可以在 Rails 应用程序中访问远程 MongoDB 和 Elasticsearch 等数据库。这里以 MongoDB 为例。
在 Gemfile
中添加 mongo
和 bson
gems:
gem 'mongo'
gem 'bson'
安装 gems:
bundle install
在 config/initializers/ssh_tunnel.rb
中添加 SSH 隧道代码:
require 'net/ssh/gateway'
SSH_OPTIONS = {
forward: {
27017 => { host: 'REPLACE_WITH_SSH_HOST', user: 'REPLACE_WITH_SSH_USERNAME' } # 替换为SSH服务器地址和用户名
}
}
def with_tunnel
gateway = Net::SSH::Gateway.new(*SSH_OPTIONS[:forward][27017].values)
local_port = gateway.open('REPLACE_WITH_MONGODB_HOST', 27017) # 替换为 MongoDB 服务器地址
yield "localhost:#{local_port}"
ensure
gateway.shutdown!
end
Mongo::Logger.logger.level = Logger::WARN
Mongo::Client.new(['REPLACE_WITH_MONGODB_HOST'], database: 'REPLACE_WITH_DATABASE_NAME', server_selection_timeout: 5, connect_timeout: 5) do |config|
with_tunnel { |uri| config.uri = "mongodb://#{uri}" }
end
请务必替换 SSH 服务器地址、用户名、MongoDB 服务器地址和数据库名称。
如果您正在使用 Heroku,您可以使用 Heroku Connect 共享数据、连接第三方服务和构建 API。在 Heroku 网站上创建新的应用程序,然后按照提示设置连接。设置完毕后,您将获得一个环境变量 DATABASE_URL
。您可以使用此环境变量启动您的本地 Rails 服务器。在 config/database.yml
文件中,您可以使用 ENV['DATABASE_URL']
代替具体数据库配置。示例内容如下:
development:
adapter: postgresql
encoding: unicode
database: REPLACE_WITH_DATABASE_NAME
pool: 5
username: REPLACE_WITH_USERNAME
password: REPLACE_WITH_PASSWORD
host: localhost
port: 5432
url: <%= ENV['DATABASE_URL'] %>
在 Rails 应用程序中使用远程数据库可以提供各种优势。使用 TCP/IP 连接可以访问常见数据库,使用 SSH 隧道连接可以访问其他数据库,使用 Heroku 可以方便地共享数据和构建 API。现在,您可以按照需要选择其中一种方法连接到远程数据库了。