首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ruby on Rails -在SSH隧道查询后连接回应用程序数据库

Ruby on Rails 使用 SSH 隧道连接到远程数据库是一种常见的安全实践,尤其是在开发和测试环境中。SSH 隧道可以加密数据库连接,防止敏感数据在传输过程中被截获。

基础概念

SSH 隧道是一种通过 Secure Shell (SSH) 协议创建的安全网络连接。它允许你将本地端口转发到远程服务器上的另一个端口,从而可以安全地访问远程服务,如数据库。

优势

  1. 安全性:所有通过隧道的数据都是加密的。
  2. 便利性:可以在本地开发环境中直接访问远程数据库,无需修改应用程序的数据库配置。
  3. 灵活性:可以用于多种服务,不仅仅是数据库。

类型

  • 本地端口转发:将本地端口转发到远程服务器上的另一个端口。
  • 远程端口转发:将远程服务器上的端口转发到本地端口。
  • 动态端口转发:创建一个 SOCKS 代理,可以转发到任何远程服务。

应用场景

  • 开发环境:开发者可以在本地开发环境中安全地访问远程数据库。
  • 测试环境:在测试环境中模拟生产环境的数据库连接。
  • 迁移数据:在不暴露数据库直接访问权限的情况下迁移数据。

示例代码

以下是一个使用 Ruby on Rails 和 SSH 隧道连接到远程数据库的示例:

1. 创建 SSH 隧道

你可以使用 ssh 命令行工具创建一个 SSH 隧道:

代码语言:txt
复制
ssh -L 3306:localhost:3306 user@remote-server

这条命令将本地的 3306 端口转发到远程服务器上的 3306 端口。

2. 配置 Rails 数据库连接

在你的 Rails 项目的 config/database.yml 文件中,配置数据库连接如下:

代码语言:txt
复制
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: your_db_username
  password: your_db_password
  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
  database: your_development_db

test:
  <<: *default
  database: your_test_db

production:
  <<: *default
  database: your_production_db

在开发环境中,你可以将 socket 配置改为使用本地端口转发:

代码语言:txt
复制
development:
  <<: *default
  database: your_development_db
  socket: /var/run/mysqld/mysqld.sock

改为:

代码语言:txt
复制
development:
  <<: *default
  database: your_development_db
  host: localhost
  port: 3306

遇到的问题及解决方法

1. 连接超时

原因:可能是 SSH 隧道没有正确建立,或者网络延迟过高。

解决方法

  • 确保 SSH 隧道命令正确无误。
  • 检查网络连接,确保没有防火墙阻止 SSH 连接。

2. 数据库认证失败

原因:可能是数据库用户名或密码错误,或者数据库服务器不允许从本地地址访问。

解决方法

  • 确认数据库用户名和密码正确。
  • 检查数据库服务器的访问控制列表(ACL),确保允许从本地地址访问。

3. 数据库连接不稳定

原因:可能是 SSH 隧道不稳定,或者数据库服务器负载过高。

解决方法

  • 使用更稳定的网络连接。
  • 优化数据库服务器配置,提高性能。

通过以上步骤和解决方法,你应该能够在 Ruby on Rails 中成功使用 SSH 隧道连接到远程数据库。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用SSH隧道保护三层Rails应用程序中的通信

在Ruby on Rails应用程序中,它可以轻易地映射到表示层的Web服务器,应用程序层的Rails服务器和数据层的数据库。...在本教程中,您将在三层配置中部署Rails应用程序,方法是在三个单独的服务器上安装一组唯一的软件,配置每个服务器及其组件以进行通信和协同工作,并使用SSH隧道保护它们之间的连接。...安装Ruby on Rails框架。在您学习本教程时,请务必安装最新版本的Ruby,在撰写本文时,是Ruby 2.5.1。 安装PostgreSQL。...该 应用程序服务器 必须能够连接到 数据库服务器 才能访问所需的Rails应用程序中的数据,和 web服务器 必须能够连接到 应用服务器 ,以便它有东西呈现给用户。...一旦您确认您的Rails应用程序由Puma提供并且已正确配置为在 数据库服务器 上使用远程PostgreSQL实例,您就可以继续在 Web服务器 和 应用服务器 之间设置SSH隧道。

5.7K30

使用Capistrano,Nginx和Puma在Ubuntu 14.04上部署Rails应用程序

它通过在SSH上编写任意工作流脚本,可以将Web应用程序可靠地部署到任意数量的远程计算机,并自动执行预编译和重新启动Rails服务器等常见任务。...警告:禁用root登录后,请确保您可以作为部署用户SSH连接到服务器,并在关闭您打开的root SSH会话以进行这些更改之前为该用户使用sudo。 本教程中的所有命令都应以deploy用户身份运行。...安装您将在Rails应用程序中使用的数据库。...ssh -p your_port_num deploy@your_server_ip 'cat >> ~/.ssh/authorized_keys' 第六步 - 在Rails应用程序中添加部署配置 在本地计算机上...输入以下命令来捆绑您的Rails应用程序: $ bundle 捆绑后,运行以下命令配置Capistrano: $ cap install 这将创建: Capfile 在您的Rails应用程序的根目录中

5K40
  • 慢的不是 Ruby,而是你的数据库

    然而,这也导致在 Rails 中性能成为一个问题,甚至比在 Ruby 中更加突出。 因此,“堆栈” 指的是 “使用数据库的 Ruby on Rails”。...我曾在一个拥有百万级用户的应用程序中,导致数据库服务器集群崩溃:原因在于一个无关控制器的简单更改,使 Rails 切换到一个外部连接,该连接具有巨大物化视图,本不应以这种方式连接(用于报告)。...未优化的连接。添加简单的 has_many 太容易了,这使得开发人员可以在数据库中启动过于繁重的查询。一旦通过应用程序引入和传播,这几乎不可能解决。...而且它会查询五个连接表并且连接到至少一个索引上,而这个索引并不是为此准备的。导致大约 800 毫秒的查询。在每次页面加载时。 未优化的 where、group 和 order 调用。...保持所有数据库调用简单。尽可能少的连接,尽可能少的过滤器和排序。一般来说,数据库可以更容易地为此进行优化。这也使应用程序与实际的数据库细节分离。 N+1 个查询并不总是坏事。有时甚至是首选。

    15130

    如何在Ubuntu 14.04上使用PostgreSQL和Ruby on Rails应用程序

    介绍 Ruby on Rails使用sqlite3作为其默认数据库,在许多情况下效果很好,但可能不适合您的应用程序。...本教程将向您展示如何设置开发Ruby on Rails环境,该环境允许您的应用程序在Ubuntu 14.04服务器上使用PostgreSQL数据库。首先,我们将介绍如何安装和配置PostgreSQL。...: cd appname 下一步是配置应用程序的数据库连接。...配置数据库连接 您创建的PostgreSQL用户将用于创建应用程序的测试和开发数据库。我们需要为您的应用程序配置正确的数据库设置。 在您喜欢的文本编辑器中打开应用程序的数据库配置文件。...结论 您现在已准备好在Ubuntu 14.04上使用PostgreSQL作为数据库在Ruby on Rails应用程序上开始开发! 祝好运!

    3.4K00

    如何部署Mina:入门教程

    Mina 在Deployment Server上创建部署者用户 4.使用config / deploy.rb 定义服务器 部署应用程序 定义部署任务 使用任务和子任务 5.示例:部署Rails应用程序...部署应用程序:无论您是否安装了HTTP服务器应用程序,都可以使用Mina在部署计算机上更新应用程序的源代码,无需处理FTP或其他工具即可自动启动并运行新版本。...准备系统 为了安装Ruby,我们首先需要准备最小的CentOS服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。...ruby环境和rails,可以参考腾讯云开发者实验室在 Linux 上部署 Ruby On Rails 环境,腾讯云社区也提供Ruby中文开发者手册,欢迎使用。...应用程序 关于Rails应用程序部署示例,请参考:“如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序”。

    4.5K40

    如何在Ubuntu 14.04上使用MySQL和Ruby on Rails应用程序

    介绍 Ruby on Rails使用sqlite3作为其默认数据库,在许多情况下效果很好,但可能不适合您的应用程序。...安装MySQL Gem 在您的Rails应用程序可以连接到MySQL服务器之前,您需要安装MySQL适配器。在mysql2创业板提供了这个功能。...然后重新访问上一小节(配置数据库连接)以确保密码输入database.yml正确。确保密码正确后,尝试再次创建应用程序数据库。...IP地址在Web浏览器中访问您的Rails应用程序: http://server_public_IP:3000 如果您看到“欢迎登陆”Ruby on Rails页面,您的应用程序已正确配置,并连接到MySQL...结论 您现在已经准备好在Ubuntu 14.04上使用MySQL作为数据库在Ruby on Rails应用程序上开始开发! 祝好运! 更多Ubuntu教程请前往腾讯云+社区学习更多知识。

    4.9K00

    Rails 部署总结

    忽悠妹子给我在腾讯云买了服务器后,马不停蹄的就开始了填坑之旅。这里我选择的系统是 Ubuntu 16.04 ,所以下面的命令以此为准。 准备工作 在开始部署之前有些准备工作需要去完成,这些准备工作其实在每次开始新建服务器后你都要去做。 为了安全起见我一般习惯不使用密码登录服务器而是使用 SSH 的方式。...Nginx 安装好之后,你可以通过在浏览器中直接输入 IP 检测,默认会有一个欢迎页。 部署的过程 通过 Git 获取其他方式将代码拉取到服务器之后,接下来就是配置数据库文件并创建数据库了。...因为不同系统和数据库配置存在差异,所以第一次配置的时候你可以通过在服务器上新建测试工程来拷贝其中的配置。...创建数据库: $ RAILS_ENV=production rails db:create $ rails db:create 配置好数据库后就是拉起 Rails 了,但是此处有坑。

    7K50

    框架分析(6)-Ruby on Rails

    Ruby on Rails Ruby on Rails(简称Rails)是一种使用Ruby编程语言开发的开源Web应用程序框架。...通过Active Record,开发人员可以使用Ruby代码来表示数据库表和记录,而无需直接编写SQL语句。它还提供了丰富的查询接口和数据验证功能。...总结 Ruby on Rails是一个功能强大、易用且开发效率高的Web应用程序框架。...通过Active Record,开发人员可以使用Ruby代码来表示数据库表和记录,而无需直接编写SQL语句。它还提供了丰富的查询接口和数据验证功能,使数据库操作更加简单和安全。...缺点 性能问题 相比其他编程语言和框架,Ruby on Rails在处理大量并发请求时可能会有一些性能瓶颈。这主要是由于Ruby语言本身的特性和Rails框架的设计理念所致。

    39020

    如何在CentOS 6.5上使用 Nginx+Passenger 部署Railes应用程序

    使用Ruby编程语言和Rails Web应用程序开发框架开始使用您的应用程序之后,当需要与世界其他地方共享您的应用程序时,可能会出现无数可能的组合。...请记住: “处理”连接在技术上意味着不要丢弃它们并能够用某些东西为它们提供服务。您仍然需要您的应用程序和数据库正常运行才能让Nginx为客户端提供非错误消息的响应。...没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。...运行以下命令以开始使用本机Passenger模块编译Nginx: passenger-install-nginx-module 运行命令后,按Enter键确认您选择的语言(即Ruby,在我们的例子中)。...准备部署应用程序 注意:在本节中,我们将使用一个非常简单的Ruby On Rails应用程序作为示例。对于应用程序的实际部署,您应该上传代码库并确保安装了所有依赖项。

    5K20

    在Debian 9上使用Apache安装Ruby on Rails

    什么是Ruby on Rails? Ruby on Rails是一个服务器端Web应用程序框架。它维护了一组策划组件和“约定优于配置”的理念,使得我们可以快速开发应用程序而无需大量样板。...本指南将向您展示如何使用Phusion Passenger在您的Linode上部署Rails应用程序。...完成“ 保护您的服务器 ”部分以创建标准用户帐户,加强SSH访问并删除不必要的网络服务。...on Rails 使用Rubygems包管理器安装Rails: gem install rails --version=5.1.4 将您的Rails应用程序移动到您的Linode,或者如果您还没有应用程序...将路径替换为您的Rails应用程序,Ruby解释器的路径(来自上一步),主机名或IP地址以及必要时的任何其他信息。

    5.8K30

    自托管代码平台Gitlab | 搭建使用教程

    所有极狐GitLab 数据将存储在 $GITLAB_HOME 的子目录中。系统重启后,容器将自动 restart。 初始化过程可能需要很长时间。...启动容器后,您可以访问 gitlab.example.com。Docker 容器开始响应查询可能需要一段时间。 3.3重置管理员密码 此时gitlab已经成功安装。...sudo docker exec -it gitlab /bin/bash 然后用下面命令进入 到gitlab的rails控制台 gitlab-rails console #这一步比较慢,大概在1分钟左右...在新建完成仓库以后,你可以通过HTTP协议clone至本地。 但是,如果你尝试使用SSH协议进行操作,多半会提示输入密码。 7.1.2方式一 这时需要我们在配置中修改SSH端口。...此时你会发现复制ssh地址时是完整且正确的,但是却无法克隆git会告诉我们连接被拒绝。你会惊奇的发现当前ssh监听端口依然为22并没有因为配置文件的修改而改变。

    51310

    Gitlab安装使用及汉化配置

    一、GitLab简介 GitHub是2008年由Ruby on Rails编写而成,与业界闻名的Github类似;但要将代码上传到GitHub上面,而且将项目设为私有还要收费。...当团队中开发者规模达到一定数量后,需要付费购买相应的套餐。...操作系统和任何其他正在运行的应用程序也将使用内存,因此请记住,在运行GitLab之前,您至少需要4GB的可用空间。...在GitLab中,不是客人的所有项目成员(因此,记者,开发人员和主人)都可以克隆资料库以获取本地副本。获取本地副本后,用户可以随时上传完整的存储库,包括其控制下的另一个项目或其他服务器。...hypervisors(使用Docker容器在不同的云和虚拟化管理程序上进行自动缩放) connecting to remote SSH server(连接到远程SSH服务器) #安装 #安装gitlab-ci-multi-runner

    6.3K60

    如何在Ubuntu 14.04上使用Puma和Nginx部署Rails应用程序

    介绍 当您准备部署Ruby on Rails应用程序时,需要考虑许多有效的设置。...本教程将帮助您部署Ruby on Rails应用程序的生产环境,使用PostgreSQL作为数据库,在Ubuntu 14.04上使用Puma和Nginx。...使用以下命令退出PostgreSQL控制台: \q 现在,我们已准备好使用正确的数据库连接信息配置您的应用程序。 配置数据库连接 确保您位于应用程序的根目录(cd ~/appname)中。...安装rbenv-vars插件 在部署生产Rails应用程序之前,应使用环境变量设置生产密钥和数据库密码。...现在,您的应用程序配置为在启动时通过Upstart启动。这意味着即使在重新启动服务器后,您的应用程序也会启动。

    5.4K10

    用selenium自动化验收测试

    Rails 使用 YAML 而不是 XML 配置文件以及注释形式的反射和运行时扩展。这里不存在编译阶段 —— 程序修改后将直接运行。 回页首 什么是 Selenium?...回页首 现实中的需求 在接下来的两节(现实中的需求 和 现实中的用例)中,我将描述如何在现实场景中使用 Selenium,并针对用 Ruby on Rails 和一点儿 Ajax 技术编写的一个简单的股票报价查看器应用程序编写...这个示例应用程序是用 Ruby 1.8.3 和 Ruby on Rails 0.14.2 测试的,但是它也可能可以使用更旧的或更新的版本。 如果有 Linux,那么发行版中通常已经包括了 Ruby。...在 Ruby on Rails 应用程序中,这个文件夹的名称是 public。...从命令提示符下运行 Ruby on Rails 回页首 现实中的用例 在本节中,我将列出示例应用程序的用例。

    6.2K30

    SSH隧道详解与使用AutoSSH实现稳定的内网穿透

    工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去,根据应用程序的协议可以判断出远程主机将和哪里连接....如果现在客户端想要访问主机B的某个服务时(如mysql数据库),此时只要主机A可以访问到主机B的SSH端口,这里就可以使用SSH隧道,实现客户端访问主机A的转发端口即可访问到主机B的mysql数据库。...功能解释 上面我们知道了本地转发是在A服务器执行ssh命令后将转发端口设置在A服务器本身,远程转发则相反,是将转发端口设置在ssh命令的目标服务器上。...将远程转发绑定到网卡 上一小节我们尝试建立远程转发隧道后,仅监听127.0.0.1地址,这是因为在SSH服务的配置文件/etc/ssh/sshd_config中有这样一个配置 GatewayPorts...客户端代理配置 当隧道创建好之后我们需要通过代理客户端进行设置之后才会使用隧道,如果应用程序支持配置直接配置即可,如果是不支持配置代理的应用程序可以使用到socket代理工具来搭配使用,我常用的客户端代理工具是

    4.5K50

    Ansible和Docker的作用和用法

    在 Docker 和 Ansible 的技术社区内存在着很多好玩的东西,我希望在你阅读完这篇文章后也能像我们一样热爱它们。...除了 Python 和 SSH,Ansible 不再依赖其他软件,在它的远端主机上不需要部署代理,也不会留下任何运行痕迹。...当我完成这些基本设定后,就可以部署我的应用了。值得一提的是这个过程中我没有配置任何数据库或程序开发语言,Docker 已经帮我把应用所需要的事情都安排好了。...这个步骤的目的是能正确解决应用和它的依赖关系,让 Docker 容器正确链接起来,保证在真正的应用容器启动前能通过所有测试项目。 CMD 这个步骤是在新的 web 应用容器启动后执行的。...在测试环节结束后马上就执行/run-terrabox命令进行编译。

    2.2K20
    领券