为什么我们要从 NodeJS 迁移到 Ruby on Rails

Ruby on Rails 容器化开发:Docker Compose 实战指南 容器化是现代 Ruby on Rails 应用保障环境一致性的核心技术手段。其核心原理在于通过声明式配置(如 docker-compose.yml)固化 Ruby 版本、Gem 依赖、PostgreSQL 主版本、Redis 协议等运行时契约,消除因操作系统差异、本地工具链冲突(如 Homebrew portable ruby 失败、OpenSSL 版本不兼容)导致的‘环境病’。该技术显著提升团队协作效率与 CI/CD 可靠性,广泛应用于 Rails 开发、测试及预发布环境搭建。本文聚焦 Docker Co 阅读详情

声明:这篇文章绝不是一篇讨论 NodeJS 和 Ruby on Rails 孰优孰略的檄文。 它描述的只是我们做决策过程中的一些思考、决策背后的原因。 两种框架都非常优秀,都出色的完成了它们的设计初衷,这也是为什么我们部分的模块仍然运行在NodeJS上的原因。

我是NodeJs的大粉丝,认为这是一项让人非常兴奋的技术,相信它会变的越来越流行。 我对这项技术非常的欣赏——尽管我们最近把Targeter App从NodeJS迁移到了Ruby on Rails。

我们当时使用NodeJS开发它的原因很简单。 我有一个程序包,能很快的将我们的应用弄上线(我们花了54小时做这个事情),相比起Ruby,我更常使用的是JavaScript。 因为我们的技术架构牵涉到MongoDB,我的这些特长只有在NodeJS环境里才会有意义。 然而,随着应用规模的增长,我认识到,选择NodeJS来实现这个应用是个错误的选择。

下面让我来概述一下其中的原因。

NodeJS很适合做那些有大量短生命期请求的应用。 对于传统的CRUD应用,它也很好,但不是非常的理想。 在PHP,Ruby,Python语言里都有很成熟、优化的很好的框架来处理这种应用。 NodeJS里的所有东西都异步执行的理念对于CRUD应用来说没有任何效果。 其它语言里的流行的框架能提供非常好的缓存技术,你所有的需求都能满足,包括异步执行。

NodeJS是一种非常年轻的技术框架,它的周边程序库都不是很成熟。 我说这些并没有任何对那些代码捐赠者冒犯的意思,他们很优秀,开发出来很多优秀的程序库。 然而,大部分程序库需要改进,而NodeJS的这种快速成长的环境意味着每一版升级中都带有大量的变化; 当你使用一种前沿技术时,你十分有必要尽快的紧跟最新的版本。 这给创业型的企业带来了很多的麻烦。

另外一个原因是关于测试。 NodeJS里的测试框架还不错,但跟Django或RoR平台上的相比还是差一些。 对于一个每天都有大量的代码提交、并且在一两天内就要发布的应用来说,程序不能出问题是至关重要的, 否则你为此辛苦的努力变得得不偿失。 没有人愿意花一天的时间改一些弱智的bug。

最后一点,我们需要的是一种能缓存一切的东西,并且要尽快的实现。 尽管我们的应用在增长,每秒钟有上万次的hits,但绝不会出现很大量的访问请求;这不是一个聊天程序! 主程序最多时也就达到1000RPS,这样的负载对于Ruby on Rails和Nginx来说算不了什么。

如果你现在还在读这篇文章,那你已经看到了我所有要说的了, 你也许非常坚持的想知道我们的应用什么地方还在使用NodeJS。 是这样的,我们的应用由两部分组成。 一是界面,用户看到的这部分,二是负责报表管理的部分,以及做日志的功能。 后者是NodeJS的一个最佳使用场景,存在有大量的短周期的请求。 这部分的动作需要尽快的执行完成,甚至要在我们的数据推送还没有完成之前。 这很重要,当请求执行还未结束,浏览器继续等待响应结束,这会影响用户使用体验。 NodeJS的异步特性救了我们。 数据要么被存入数据库,要么被处理掉,当请求一旦执行完成,浏览器就可以开始做其它重要的事情了。

本文英文原文链接:Why we moved from NodeJS to RoR

Debian 8 上用 RVM 安装 Ruby on Rails 的工程实践指南 Ruby on Rails 是一套强调开发效率与可维护性的 Web 应用框架,其运行依赖特定 Ruby 版本与隔离的 gem 生态。在老旧但稳定的 Linux 发行版(如 Debian 8)上部署 Rails,核心挑战在于绕过陈旧系统 Ruby、规避 apt 包管理冲突,并实现多版本 Ruby 与项目级 gem 隔离。RVM(Ruby Version Manager)凭借用户级沙盒、bash 兼容性优化及自动依赖提示能力,成为该场景下比 rbenv 更稳健的选择。它支持在不触碰 `/usr/bin/ruby 阅读详情

相关推荐

CentOS 6 安装 Ruby on Rails 实操指南:Ruby 2.3.8 + Rails 5.2 兼容方案

Ruby on Rails 是基于 Ruby 语言的全栈 Web 开发框架,其运行依赖于特定版本的 Ruby 解释器、gem 包管理生态及底层系统库兼容性。在 CentOS 6 这类已终止支持但仍在关键业务中服役的旧系统上,直接使用 yum 或现代工具链安装 Rails 会因 glibc 版本(2.12)、OpenSSL(1.0.1e)和编译工具链过旧而失败。核心原理在于构建‘受限环境下的可控演进’:通过源码编译 Ruby 2.3.8 并静态链接定制 OpenSSL 1.0.2u,规避系统级 SSL 证书失

weixin_33738555的博客 380

【Node.js】Web开发框架

Node.js的生态系统提供了多种Web开发框架,它们各自具有不同的特点和适用场景。这些框架帮助开发者快速构建高性能、可维护的Web应用程序。Express.js是Node.js最流行的Web框架,提供了简单而灵活的API,适用于各种Web应用和API开发。fill:#333;color:#333;color:#333;fill:none;客户端请求Express应用路由中间件1中间件2路由处理器响应客户端。

Guiat的博客 1846

QCPColorMap实现瀑布图

QCPColorMap实现真正的瀑布图

pf1873252141的博客 5268

web学习-Node.js入门学习

Node.js是一个基于Chrome V8引擎JavaScript运行环境Node.js官网Node.js可以做什么:Node.js作为一个JavaScript的运行环境,仅仅提供了基础的功能和API,然而,基于Node.js提供的这些基础功能,很多强大的工具和框架如雨后春笋,层出不穷,所以学习Node.js,可以让前端程序员胜任更多的工作和岗位:基于Express框架,可以快速构建Web应用基于Electron框架,可以构建跨平台的桌面应用基于restify框架,可以快速构建API接口项目。

yong_19930826的博客 1017

2025海外代理IP深度横评:Bright Data、IPFoxy、SmartProxy等六大服务商实战对比

本文深度横评2025年六大海外代理IP服务商(Bright Data、IPFoxy、SmartProxy、IPIPGO、Kookeey及青果网络),基于实战测试数据,从IP池质量、速度稳定性、性价比等维度进行对比。针对跨境电商、数据爬虫、社交媒体管理等不同业务场景,提供精准的选购指南与避坑建议,帮助企业用户根据自身需求选择最合适的代理IP解决方案。

weixin_29196891的博客 434

SAP MM新手避坑指南:工厂间调拨用301还是303?手把手教你选对移动类型

本文深入解析SAP MM模块中工厂间调拨的301与303移动类型,帮助新手避开常见陷阱。通过对比一步法(301)和两步法(303+305)的核心差异、适用场景及财务影响,提供清晰的决策框架和实战技巧,确保库存调拨的准确性和效率。

weixin_29223603的博客 346

使用Node.js进行Web开发(一)

在这篇开始,我们学习基于express框架开发一个微博网站。首先我们了解Node.js是基于MVC(模型-视图-控制器)的设计模式。 模型是对象及其数据结构的实现,通常包含数据库操作; 视图表示用户界面,在网站中通常就是HTML的组织架构; 控制器用户处理用户请求和数据流、复杂模型,将输出传递给视图。 步骤 1、 安装express nom install -g express 如果出现错误请看express无法识别 2、建立项目 express -t ejs microblog 之后发现当前目录下

huangxunlove的博客 2010

Windows下构建ImGui.Net

工具 Visual Studio 2017 操作 下载项目 git clone https://github.com/mellinoe/ImGui.NET.git 编译 右键以下两个项目并调试: ImGui.NET.SampleProgram ImGui.NET.SampleProgram.XNA Error fix 中间遇到一些问题: SDK版本不对 去微软官网下载安装对应版本 由于设置了代理被远程服务器拒绝连接 关闭代理(也许在环境变量中) nuget源无对应资源,404 NOT FOUN

jojozym的博客 1486

Web开发 ,用Python 还是 Node.js? 我的经验是...

axios({headers: {},params: {},timeout: 5000 // 设置超时})})});这里你可以设置请求头、查询参数、超时限制等,axios提供了非常强大的配置项。// 自定义解析响应数据})// 请求已发出,服务器响应了状态码// 请求已发出,但没有收到响应} else {// 其他错误});你可以根据不同的错误情况进行更详细的错误处理和响应解析。灵活的请求配置(如请求头、参数、超时设置等)

minstbe的博客 2155

海思ISP实战:YUV Sharpen参数调试全解析

本文深入解析了在海思ISP平台上进行YUV Sharpen参数调试的实战经验。文章以海思3516EV300芯片为例,详细拆解了EdgeFiltStr、TextureFreq等核心参数的作用与协同策略,并重点阐述了如何通过ISO联动调试,在图像清晰度与噪声抑制之间取得最佳平衡,为图像调试工程师提供了宝贵的避坑指南和实战参考。

grape的博客 209

OpenClaw部署太难?汉化版+中文社区+国产替代品,国内用户零门槛指南

OpenClaw作为GitHub 10万+星的开源AI助手平台,近期在国内AI圈备受关注 🌟 但部署难度和英文界面让很多用户望而却步。本文整理了针对国内用户的友好资源和简便替代方案,帮助国内用户零门槛上手AI助手工具 🚀

XiaoqiangClub的博客 5758

10 数据库与身份认证

10. 数据库与身份认证 1. 在项目中操作数据库的步骤 安装操作MYSQL数据库的第三方模块(mysql) 通过mysql 模块连接到MYSQL数据库 通过mysql模块执行SQL语句 2. 代码实现连接数据库 //1.导入mysql模块 //import mysql from 'mysql' const mysql = require('mysql') //2.建立与mysql 数据库的链接关系 const db=mysql.createPool({ host: '192.168.142

qq_42392049的博客 1006

CMake入门教程【基础篇】在Windows、Linux上安装CMake

CMake如何下载与安装

小鱼酱的博客 2727

php 前途 ruby on railsnodejs,为何我们要从Node.JS迁移到Ruby on Rails

声明:这篇文章绝不是一篇讨论Node.JS和Ruby on Rails孰优孰略的檄文。它描述的只是我们做决策过程中的一些思考、决策背后的原因。两种框架都非常优秀,都出色的完成了它们的设计初衷,这也是为什么我们部分的模块仍然运行在Node.JS上的原因。我是Node.JS的大粉丝,认为这是一项让人非常兴奋的技术,相信它会变的越来越流行。我对这项技术非常的欣赏——尽管我们最近把Targeter App...

weixin_35256987的博客 200

026、传感器校准:加速度计校准

本文详细介绍了无人机飞控系统中加速度计的校准方法。作者从一次炸机事故引入,强调加速度计校准的重要性。文章首先解释了加速度计测量原理和误差来源,包括零偏、尺度因子和交叉轴耦合。重点介绍了两种校准方法:六位置法利用重力作为参考,操作简单但精度有限;椭球拟合通过采集大量数据点进行最小二乘拟合,精度更高但实现复杂。文章还指出温度补偿这一常被忽视的关键因素,并分享了实际调试中的经验教训,包括采样时长、安装误差、验证方法等。最后建议初学者从六位置法入手,逐步优化校准精度,强调良好的校准是飞控性能的基础。

2401_88858637的博客 44

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

5分钟跑通Bountysource:Ruby on Rails本地开发环境搭建与Docker快速入门

Bountysource 是一个为开源软件提供资金支持的悬赏平台(funding platform for open-source software)。这篇文章将带你快速搭建 Bountysource 的 Ruby on Rails 本地开发环境,并演示如何用 Docker 一键启动完整服务,适合 Rails 新手和开源贡献者阅读。 [![Bountysource GitHub插件为Issue添

gitblog_00635的博客 382

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Ruby on Rails 开发者必学:Docker Compose 容器化实战指南

容器化是现代软件开发中保障环境一致性与协作效率的核心实践,其本质是通过声明式配置封装应用及其依赖(如数据库、缓存、队列)到隔离的运行时环境中。Docker Compose 作为轻量级多容器编排工具,以 YAML 文件定义服务拓扑,天然契合 Rails 开发者关注‘是什么’而非‘怎么做’的工程思维。它规避了 Ruby 版本冲突、native extension 编译失败、本地与 CI 环境不一致等高频痛点,显著提升新成员接入速度与日常迭代确定性。相比裸 docker run 的命令式复杂度或 Kubernet

weixin_30482383的博客 321

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Ubuntu 18.04下用RVM部署Ruby on Rails实战指南

Ruby版本管理是Web开发中保障环境隔离与依赖可控的核心能力,其原理在于通过用户级沙盒实现Ruby解释器、Gems及编译参数的精准隔离。RVM作为成熟稳定的版本管理工具,具备原生gemset支持、系统库兼容性自动检测和可复现安装流程等技术优势,在老旧系统如Ubuntu 18.04上展现出不可替代的工程价值。它有效解决OpenSSL版本冲突、libyaml缺失、glibc链接异常等典型编译问题,并支撑Rails 5.2至7.0等多代框架稳定运行。适用于企业遗留系统维护、CI/CD构建节点加固及内网受限环境下

dielucuan8830的博客 465

Ruby on Rails 开发环境容器化:Docker Compose 实战指南

容器化是现代 Web 应用开发的基础能力,它通过隔离运行时环境解决语言版本冲突、系统依赖不一致和网络配置错乱等核心问题。其原理在于利用镜像分层与声明式编排实现环境可复现性,技术价值体现在提升团队协作效率、缩短新人上手周期并保障本地与生产环境的一致性。典型应用场景包括 Ruby on Rails 多服务协同开发(如 PostgreSQL、Redis、Sidekiq 联调),尤其适用于需要快速迭代、频繁重置数据库或跨平台(macOS/Windows/Linux)协作的工程实践。Docker Compose 作为

weixin_30437847的博客 496

Ubuntu 16.04 下用 rbenv 部署 Ruby on Rails 实战指南

Ruby 是一种动态、面向对象的脚本语言,其核心价值在于开发效率与运行时灵活性;Rails 则是基于 Ruby 构建的全栈 Web 框架,强调约定优于配置。rbenv 作为轻量级 Ruby 版本管理工具,通过 shims 机制实现无侵入式版本切换,不污染系统环境,特别适合资源受限、升级受限的老旧生产环境。相比 apt 包管理、rvm 或 Docker,rbenv 在 Ubuntu 16.04 这类长期支持但内核与工具链陈旧的系统中,展现出极强的稳定性、可复现性与低运维开销。本文聚焦真实企业场景——在无法升级

conghuang7343的博客 382

Ubuntu 16.04下用RVM管理Ruby版本与Rails环境

Ruby版本管理是现代Web开发的基础能力,其核心在于解决多版本共存、项目隔离与系统兼容性问题。RVM(Ruby Version Manager)通过用户级沙盒机制,在不触碰系统Ruby的前提下实现Ruby解释器与gemset的精细化控制,技术原理涵盖GPG安全校验、源码编译依赖管理、shell环境注入及gemset作用域隔离。该方案显著提升开发效率与部署稳定性,广泛应用于遗留系统维护、微服务多版本并行及CI/CD环境标准化场景。尤其在Ubuntu 16.04等长期支持但软件陈旧的发行版中,RVM成为运行新

weixin_34319374的博客 430
上一篇: 人民币的符号的正确表示法?一杠?两杠?
下一篇: 写一段最短的代码,用上js所有关键字
迷渡
迷渡 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄19年 2405粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值