📜  rails 连接到远程数据库 - Ruby (1)

📅  最后修改于: 2023-12-03 15:34:37.162000             🧑  作者: Mango

Rails 连接到远程数据库 - Ruby

在 Rails 应用程序中使用远程数据库可以提供许多优势,例如访问外部数据、横向扩展和数据共享等。这篇教程将向您介绍使用 Ruby on Rails 应用程序连接到远程数据库的几种方法。

TCP/IP 连接

通过 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 隧道连接

通过 SSH 隧道连接,您可以在 Rails 应用程序中访问远程 MongoDB 和 Elasticsearch 等数据库。这里以 MongoDB 为例。

Gemfile 中添加 mongobson 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,您可以使用 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。现在,您可以按照需要选择其中一种方法连接到远程数据库了。