루비 온 레일즈

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

루비 온 레일즈(Ruby on Rails)는 데이비드 하이네마이어 한슨이 개발한 웹 애플리케이션 프레임워크로, 루비 프로그래밍 언어를 기반으로 한다. 2004년 오픈 소스로 처음 공개되었으며, 설정보다 관례(CoC)와 반복 금지(DRY) 원칙을 강조한다. MVC(Model-View-Controller) 패턴을 사용하며, ActiveRecord, 액션 팩 등의 패키지로 구성된다. 2004년 이후 PHP의 CakePHP, Node.js의 YEOMAN 등 여러 프레임워크에 영향을 미쳤다. 버전 7.0부터 Hotwire JavaScript 라이브러리 제품군을 기본적으로 제공하며, HTML, XML, CSS, 웹 서비스 기능 등을 지원한다. 확장성, 보안 문제에 대한 비판도 있었지만, 에어비앤비, 깃허브 등 많은 웹사이트에서 사용되고 있다.

루비 온 레일즈 - [IT 관련 정보]에 관한 문서
개요

이미지 준비중입니다.

루비 온 레일즈 로고
종류웹 애플리케이션 프레임워크
개발자데이비드 하이네마이어 한슨
최초 릴리스2004년 7월
최신 버전8.0.0.1
최신 릴리스 날짜2024년 12월 10일
프로그래밍 언어루비
라이선스MIT 라이선스
웹사이트루비 온 레일즈 공식 웹사이트
📚 더 읽어볼만한 페이지
  • 루비로 작성된 자유 소프트웨어 - Travis CI
    Travis CI는 소프트웨어 프로젝트의 지속적인 통합 및 제공을 위한 서비스로, `.travis.yml` 파일로 구성되며 GitHub와 연동하여 빌드를 실행하고 테스트 결과를 제공한다.
  • 루비로 작성된 자유 소프트웨어 - 마스토돈 (소프트웨어)
    마스토돈은 ActivityPub 표준을 사용하여 서버 간 통신을 구현하는 분산형 소셜 네트워크 소프트웨어이며, 공개, 비공개 등 다양한 개인 정보 보호 기능을 제공하고 Affero GPL 라이선스 하에 자유 및 오픈 소스로 배포된다.
  • 자유 라이브러리 - Tk (소프트웨어)
    Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다.
  • 자유 라이브러리 - SQLite
    SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다.
  • 고속 개발 도구 - 크로스 플랫폼
    크로스 플랫폼은 소프트웨어나 애플리케이션이 다양한 운영 체제, 하드웨어 플랫폼 또는 이들의 조합에서 동작할 수 있도록 하는 기술을 의미하며, 웹 애플리케이션 형태로 구현되거나 플랫폼 연동을 통해 하드웨어 경계를 넘어 콘텐츠를 즐길 수 있도록 한다.
  • 고속 개발 도구 - LabVIEW
    LabVIEW는 내쇼날 인스트루먼트에서 개발한 그래픽 기반 프로그래밍 환경으로, 시각적인 블록 다이어그램을 사용하여 데이터 수집, 계측기 제어, 자동화 시스템 구축 등에 활용되며 사용자 인터페이스 생성 통합, 병렬 프로그래밍 지원, 다양한 디자인 패턴 제공을 통해 복잡한 애플리케이션 개발을 돕는다.

2. 역사

덴마크의 프로그래머 데이비드 하이네마이어 한슨이 프로젝트 관리 도구인 Basecamp 개발 과정에서 얻은 코드와 지식을 바탕으로 루비 온 레일즈를 만들었다. 2004년 7월 오픈 소스로 처음 공개되었으며, 이후 웹 개발 분야에서 빠르게 주목받기 시작했다. 2006년에는 애플이 Mac OS X Leopard에 루비 온 레일즈를 기본 탑재하기로 발표하면서 중요한 전환점을 맞았다.

루비 온 레일즈는 지속적인 업데이트를 통해 발전해왔다. 주요 버전 릴리스는 다음과 같다.

* 2004년 7월: 첫 번째 버전 공개
* 2005년 12월 13일: 버전 1.0 릴리스
* 2007년 12월 7일: 버전 2.0 릴리스
* 2010년 8월 29일: 버전 3.0 릴리스 (이때 Merb 프레임워크와 통합됨)
* 2013년 6월 25일: 버전 4.0 릴리스
* 2016년 6월 30일: 버전 5.0 릴리스
* 2019년 8월 16일: 버전 6.0 릴리스
* 2021년 12월 15일: 버전 7.0 릴리스
* 2024년 11월 7일: 버전 8.0 릴리스

루비 온 레일즈는 등장 이후 다른 웹 프레임워크 개발에도 큰 영향을 미쳤다. 대표적으로 PHP의 CakePHP와 Symfony, Perl의 Catalyst, groovy의 Grails, Node.js의 YEOMAN 등이 루비 온 레일즈의 개념과 구조에 영향을 받았다. 2024년 10월에는 새로운 유지 관리 정책이 시행되었다.

2.1. 개발 배경

덴마크 출신의 프로그래머인 데이비드 하이네마이어 한슨은 웹 애플리케이션 회사인 베이스캠프(구 37signals)에서 프로젝트 관리 도구인 베이스캠프 작업을 진행하면서 얻은 코드와 지식을 바탕으로 루비 온 레일즈 프레임워크를 만들었다. 한슨은 2004년 7월에 레일즈를 처음 오픈 소스로 공개했지만, 2005년 2월까지는 프로젝트에 대한 커밋 권한을 다른 개발자들과 공유하지 않았다. 2006년 8월, 애플이 Mac OS X Leopard 운영체제에 루비 온 레일즈를 기본 탑재할 것이라고 발표하면서 중요한 이정표를 세웠으며, 이는 2007년 10월에 정식 출시되었다.

2.2. 버전 역사

데이비드 하이네마이어 한손이 프로젝트 관리 툴인 베이스캠프 클래식 작업을 하면서 추출하여 2004년 7월 오픈 소스로 처음 공개했다. 2005년 12월 13일 버전 1.0이 릴리스되었다. 2006년 8월, 애플이 Mac OS X v10.5 "Leopard"에 루비 온 레일즈를 포함하여 제공할 것이라고 발표하면서 중요한 이정표를 세웠다.

* 버전 2.0: HTML, XML 표준 출력 형식을 제공하고 RESTful 웹 서비스 기능을 추가했다.
* 버전 2.3: 템플릿, 엔진, Rack 지원, 중첩 모델 폼 등 주요 기능이 추가되었다. 템플릿은 사용자 지정 과 구성을 갖춘 스켈레톤 애플리케이션 생성을 가능하게 했고, 엔진은 라우트, 뷰 경로, 모델을 포함한 애플리케이션 조각의 재사용을 지원했다. Rack 웹 서버 인터페이스와 Metal은 액션 컨트롤러(Action Controller)를 우회하는 최적화된 코드 작성을 가능하게 했다.
* 버전 3.0: Merb 프로젝트와의 통합이 이루어졌다. 2008년 12월, 루비 온 레일즈 팀은 Merb 프로젝트와 협력하여 Merb의 아이디어를 Rails 3에 도입하고 커뮤니티 간의 중복을 줄이겠다고 발표했으며, Merb는 Rails 3.0 릴리스의 일부로 병합되었다.
* 버전 3.1: 가역적 데이터베이스 마이그레이션, 에셋 파이프라인, 스트리밍 기능이 추가되었다. 기본 자바스크립트 라이브러리로 jQuery가 도입되었고, CoffeeScript와 Sass가 새롭게 지원되기 시작했다.
* 버전 3.2: 개발 모드와 라우팅 엔진(Journey 엔진)이 개선되어 속도가 향상되었고, 자동 쿼리 설명 및 태그 로깅 기능이 추가되었다. 이 버전은 Ruby 1.8.7을 지원하는 마지막 버전이다. (3.2.12 버전은 Ruby 2.0을 지원한다.)
* 버전 4.0: 러시아 인형 캐싱, Turbolinks, 라이브 스트리밍 기능이 도입되었다. Active Resource, Active Record Observer 등 일부 구성 요소는 젬(gem)으로 분리되어 선택적으로 사용할 수 있게 되었다.
* 버전 4.1: Spring preloader, Variants, Enums, 메일러 미리보기, secrets.yml 파일(애플리케이션 비밀 정보 관리) 기능이 추가되었다.
* 버전 4.2: Active Job(백그라운드 작업 처리), 비동기 이메일 발송, Adequate Record(데이터베이스 쿼리 최적화), 웹 콘솔, 외래 키 지원 기능이 도입되었다.
* 버전 5.0: WebSocket을 활용한 실시간 통신 기능인 Action Cable, API 모드(API 전용 애플리케이션 개발 지원), Turbolinks 5가 도입되었다. Rake 대신 Rails CLI를 독점적으로 사용하며, Ruby 버전 2.2.2 이상을 지원한다.
* 버전 5.1: 자바스크립트 통합 방식이 변경되어 Yarn을 통한 NPM 종속성 관리, Webpack을 이용한 선택적 컴파일이 가능해졌다. Rails UJS는 jQuery 의존성을 제거하고 순수 자바스크립트로 재작성되었다. Capybara를 사용한 시스템 테스트, 암호화된 비밀 정보 관리, 매개변수화된 메일러, 직접 및 해결된 경로, 통합된 `form_with` 헬퍼(기존 `form_tag`/`form_for` 대체) 등이 도입되었다.
* 버전 5.2: 파일 업로드 및 관리를 위한 ActiveStorage, 내장 Redis 캐시 스토어, 업데이트된 Rails 자격 증명 관리, 콘텐츠 보안 정책(CSP) 구성을 위한 새로운 DSL 등이 추가되었다.
* 버전 6.0: Webpack이 기본 자바스크립트 번들러로 설정되었고, 메일함 라우팅, 기본 온라인 서식 있는 텍스트 편집기(Action Text), 병렬 테스트 실행, 다중 데이터베이스 지원, 메일러 라우팅, 새로운 자동 로더(Zeitwerk) 기능이 추가되었다.
* 버전 6.1: 데이터베이스별 연결 전환, 수평 데이터베이스 샤딩, 모든 연관 관계의 즉시 로딩(eager loading), 단일 테이블 상속(STI)의 대안인 위임된 유형(delegated types), 연관 관계의 비동기 삭제, 오류 객체 개선 등이 이루어졌다.
* 버전 7.0: 기본 자바스크립트 관리 방식이 Node.js와 Webpack 대신 가져오기 맵(Import Maps)으로 변경되었고, Turbolinks는 Turbo와 Stimulus 프레임워크 조합으로 대체되었다. Active Record에 작업 중 암호화 기능이 추가되었으며, 코드 로딩에는 Zeitwerk가 독점적으로 사용된다.
* 버전 7.1: 애플리케이션 배포 도구인 Kamal을 사용하는 Dockerfiles 지원, 인증 기능 개선, bun 지원이 추가되었다.
* 버전 8.0: 개별 개발자가 서비스형 플랫폼 없이 독립적으로 애플리케이션을 호스팅하고 관리할 수 있도록 지원하는 데 중점을 둔 업데이트가 이루어졌다. 단일 개발자가 애플리케이션 배포 및 관리의 모든 측면을 처리할 수 있도록 지원한다.

2024년 10월에는 개정된 유지 관리 정책이 시행되었다.

👆
좌우로 밀어서 보기
버전 기록
버전출시일호환 가능한 루비 버전
1.02005년 12월 13일1.8.6
1.22007년 1월 19일1.8.6
2.02007년 12월 7일1.8.6
2.12008년 5월 31일1.8.6
2.22008년 11월 21일1.8.7 권장; 1.8.6 가능
2.32009년 3월 16일1.8.7 권장; 1.8.6 및 1.9.1 가능
3.02010년 8월 29일1.9.3 권장; 1.8.7 및 1.9.2 가능
3.12011년 8월 31일1.9.3 권장; 1.8.7 및 1.9.2 가능
3.22012년 1월 20일1.9.3 권장; 1.8.7 및 1.9.2 가능
4.02013년 6월 25일2.0 선호; 1.9.3 이상 필수
4.12014년 4월 8일2.0 선호; 1.9.3 이상 필수
4.22014년 12월 19일2.0 선호; 1.9.3 이상 필수
5.02016년 6월 30일2.2.2 이상
5.12017년 5월 10일2.2.2 이상
5.22018년 4월 9일2.2.2 이상
6.02019년 8월 16일2.5.0 이상
6.12020년 12월 9일2.5.0 이상
7.02021년 12월 15일2.7.0 이상
7.12023년 10월 5일2.7.0 이상
7.22024년 8월 10일3.1.0 이상
8.02024년 11월 7일3.2.0 이상

3. 철학 및 설계

루비 온 레일즈는 개발 생산성을 높이기 위한 몇 가지 핵심 철학과 설계 원칙을 기반으로 한다. 주요 원칙으로는 [[설정보다 관례]](Convention over Configuration, CoC)[[반복 금지]](Don't Repeat Yourself, DRY)가 있으며, 이는 모델-뷰-컨트롤러(MVC) 아키텍처 패턴 구현의 핵심이다. [https://rubyonrails.org/doctrine/ 레일즈 독트린](The Rails Doctrine)은 이러한 프레임워크의 철학, 설계, 구현을 안내하는 지속적인 원칙들을 제시한다.

[[설정보다 관례]](CoC)는 개발자가 애플리케이션의 일반적이지 않은 측면만 명시적으로 설정하면 된다는 원칙이다. 프레임워크가 미리 정의된 규칙(관례)을 제공하므로, 개발자는 반복적인 설정 작업을 줄일 수 있다. 예를 들어, 모델 클래스 이름이 'Sale'이라면, 별도의 설정 없이도 데이터베이스의 해당 테이블 이름은 기본적으로 'sales'로 간주된다. 만약 'products_sold'처럼 다른 이름을 사용하고 싶을 때만 관련 코드를 작성하면 된다. 이러한 관례를 따름으로써 코드가 간결해지고 반복 작업이 줄어드는 효과가 있다. 마찬가지로, User 모델 클래스는 기본적으로 `app/models` 디렉토리의 `user.rb` 파일에 정의되며, 데이터베이스의 `users` 테이블과 연결된다.

[[반복 금지]](DRY)는 모든 정보 조각은 시스템 내에서 단일하고, 명확하며, 신뢰할 수 있는 표현을 가져야 한다는 원칙이다. 즉, 동일한 정보나 로직이 여러 곳에 중복되어서는 안 된다. 예를 들어, 레일즈의 ORM 라이브러리인 ActiveRecord를 사용하면, 모델 클래스를 정의할 때 데이터베이스 테이블의 각 열(column) 이름을 일일이 지정할 필요가 없다. ActiveRecord는 모델 클래스 이름과 데이터베이스 스키마를 바탕으로 필요한 정보를 자동으로 파악하여 중복 정의를 피하게 해준다.

"뚱뚱한 모델, 마른 컨트롤러" 원칙은 애플리케이션의 핵심 비즈니스 로직 대부분을 모델(Model) 계층에 집중시키고, 컨트롤러(Controller)는 가능한 한 가볍게 유지해야 한다는 설계 지침이다. 컨트롤러는 주로 사용자의 요청을 받아 모델과 뷰(View) 사이를 중개하는 역할에 집중하고, 복잡한 로직 처리는 모델이 담당하도록 권장한다.

레일즈는 개발 편의성을 높이기 위해 스캐폴딩과 같은 도구를 제공하여 기본적인 모델, 뷰, 컨트롤러 코드를 자동으로 생성할 수 있게 한다. 또한, WEBrick 웹 서버나 Rake 빌드 시스템 등을 포함하여 기본적인 개발 환경을 쉽게 구축할 수 있도록 지원한다. 최근 레일즈 7.0에서는 HTML Over The Wire (Hotwire), 개념적 압축, 강력한 보안 등을 통해 'One person framework' 접근 방식을 강조하며 생산성을 더욱 높이고 있다.

4. 기술적 개요

루비 온 레일즈는 새로운 버전을 출시할 때마다 획기적으로 발전하며, 새로운 기술 사용을 탐구하고 인터넷의 새로운 표준을 채택한다. 일부 기능은 루비 온 레일즈에서 매우 안정적으로 유지되는 반면, 새로운 기술을 선호하여 일부 기능은 대체되기도 한다.

4.1. [[모델-뷰-컨트롤러]](MVC) 패턴

모델-뷰-컨트롤러 (MVC) 패턴은 애플리케이션 프로그래밍을 구성하는 기본 구조이다.

기본 구성에서 루비 온 레일즈 프레임워크의 모델(Model)데이터베이스의 테이블 및 루비 파일에 매핑된다. 예를 들어, 'User' 모델 클래스는 일반적으로 `app/models` 디렉토리의 `user.rb` 파일에 정의되며, 데이터베이스의 'users' 테이블에 연결된다. 개발자는 이 규칙을 따르지 않고 모델, 파일, 데이터베이스 테이블에 다른 이름을 선택할 수도 있지만, 이는 일반적인 방식이 아니며 관례 우선 철학에 따라 권장되지 않는다. 데이터베이스 기반의 MVC 웹 애플리케이션에서 모델은 RDBMS의 테이블을 나타내는 클래스를 의미하며, 레일즈에서는 액티브 레코드를 통해 모델 클래스를 다룬다. 일반적으로 프로그래머는 `ActiveRecord::Base` 클래스의 서브클래스를 생성하며, 이를 통해 사용할 RDBMS 테이블과 칼럼을 자동으로 결정한다.

컨트롤러(Controller)웹 서버에서 애플리케이션으로 들어오는 외부 요청에 응답하는 레일즈의 서버 측 구성 요소로, 렌더링할 뷰 파일을 결정한다. 컨트롤러는 정보를 얻기 위해 하나 이상의 모델을 조회하고 그 결과를 뷰에 전달해야 할 수도 있다. 예를 들어, 항공 예약 시스템에서 항공편 검색 기능을 구현하는 컨트롤러는 검색 조건과 일치하는 항공편을 찾기 위해 개별 항공편 모델을 조회하고, 관련 정보를 위해 공항 및 항공사 모델을 추가로 조회할 수 있다. 그런 다음 컨트롤러는 이 항공편 데이터를 뷰에 전달하여, 각 항공편 정보를 테이블 형태로 보여주는 HTML 문서를 생성하게 된다. 컨트롤러는 하나 이상의 액션(Action)을 제공할 수 있는데, 레일즈에서 액션은 특정 외부 웹 브라우저 요청에 응답하는 방법을 정의하는 기본 단위이다. 컨트롤러와 액션은 라우트(route)가 매핑된 경우에만 외부 웹 요청에 접근할 수 있다. 레일즈는 개발자가 `create`, `new`, `edit`, `update`, `destroy`, `show`, `index`와 같은 액션을 포함하는 RESTful 라우트를 사용하도록 권장한다. 들어오는 요청/라우트와 컨트롤러 액션 간의 매핑은 `routes.rb` 구성 파일에서 설정할 수 있다. MVC에서 컨트롤러는 레일즈의 Action Pack에 포함된 애플리케이션 컨트롤러 클래스에 의해 처리되며, 웹 기반 MVC 애플리케이션에서는 웹 브라우저를 조작하는 사용자에 의해 컨트롤러의 메서드가 실행된다.

레일즈의 기본 구성에서 뷰(View)는 런타임에 평가되어 HTML로 변환되는 erb 파일이다. 또는 뷰에 다른 많은 템플릿 시스템을 사용할 수도 있다. MVC에서 뷰는 표시를 위한 로직이며, 컨트롤러 클래스로부터 받은 데이터를 어떻게 표시할지를 규정한다. 웹 애플리케이션에서는 주로 HTML 내에 약간의 코드를 포함시키는 방식으로 구현된다. Rails 3.1 버전부터는 표준 CSS 템플릿으로 Sass를 도입했다.

루비 온 레일즈는 기본적인 웹사이트에 필요한 일부 모델과 뷰를 자동으로 구성할 수 있는 스캐폴딩과 같이 일반적인 개발 작업을 쉽게 처리할 수 있는 도구를 포함한다. 또한 루비와 함께 배포되는 간단한 루비 웹 서버인 WEBrick와 Rake 빌드 시스템이 으로 배포되어 기본적인 개발 환경을 제공한다. 레일즈는 웹 애플리케이션 프레임워크 전체에서 동작하는 기술들을 통합하는 지점을 제공하며, 주요 통합 대상은 웹 서버 인터페이스, MVC 모델 레이어, MVC 뷰 레이어, 컨트롤러 확장 및 애드온이다. 기본 애플리케이션 스택은 모델 레이어에서 데이터 매퍼 패턴, 뷰 레이어에서 ERB, 웹 서버 레이어에서는 Rack과 Mongrel 등을 각각 통합하고 있다.

4.2. HTTP 서버

루비 온 레일즈는 일반적으로 인터넷에 직접 연결되지 않고, 프런트 엔드 웹 서버를 통해 서비스된다. 초기에는 몽그렐이 주로 사용되었으나, 2008년부터 Phusion Passenger가 몽그렐을 대체하여 가장 널리 사용되는 웹 서버가 되었다.

이 외에도 Lighttpd, 아파치, 체로키, 히아와타, Nginx 등 다양한 웹 서버 환경에서 실행될 수 있다. 특히 Nginx의 경우, Phusion Passenger와 같은 모듈을 사용하거나 CGI, FastCGI, mod ruby 등을 통해 연동할 수 있다.

루비는 IBM i 운영 체제에서도 기본적으로 지원된다.

4.3. JavaScript

루비 온 레일즈는 JavaScript 라이브러리인 Prototype와 Script.aculo.us를 사용하여 Ajax 작업을 스크립팅하는 것으로도 알려져 있다. 루비 온 레일즈 3.0에서는 페이지의 마크업(페이지 구조 정의)과 스크립팅(페이지 기능 또는 로직 결정)을 분리했다. 버전 7.0부터는 새로운 루비 온 레일즈 애플리케이션에 [https://hotwired.dev/ Hotwire] JavaScript 라이브러리 제품군이 기본적으로 설치되어 제공된다.

4.4. 웹 서비스

루비 온 레일즈는 2.0 버전부터 HTMLXML을 표준 출력 형식으로 제공한다. 특히 XML 형식은 RESTful 웹 서비스 기능을 지원하기 위한 것이다.

4.5. 프레임워크 구조

루비 온 레일즈는 여러 패키지로 구성된다. 주요 패키지로는 데이터베이스 접근을 위한 객체-관계 매핑 시스템인 ActiveRecord, 액션 팩, 액티브 서포트, 액션 메일러 등이 있다. 2.0 버전 이전에는 액션 웹 서비스 패키지도 포함되었으나, 현재는 액티브 리소스가 그 기능을 대체한다.

이러한 표준 패키지 외에도 개발자는 플러그인을 만들어 기존 패키지의 기능을 확장할 수 있다. 초기 레일즈는 자체적인 방식으로 플러그인을 지원했지만, 3.2 버전부터는 표준 루비 "젬(gem)" 방식을 선호하게 되면서 기존 방식의 플러그인 지원은 중단되었다.

5. 레일즈 기반 프로젝트 (한국)

* 잡플래닛
* 카카오아지트
* 업비트

6. 비판 및 논란

루비 온 레일즈는 개발 생산성 향상이라는 장점에도 불구하고 몇 가지 비판과 논란에 직면해 왔다. 특히 과거에는 확장성 문제가 주요 쟁점으로 부각되었으며, 여러 차례 보안 취약점이 발견되어 논란이 되기도 했다.

6.1. 확장성

과거에는 Matz의 루비 인터프리터(루비의 사실상 표준 인터프리터)에서 실행되는 레일즈는 확장성 문제로 비판을 받았다. 이러한 비판은 주로 2007년과 2008년에 발생한 여러 트위터 서비스 중단 사태를 근거로 제기되었다. 이 문제로 인해 트위터는 큐 시스템 및 기타 미들웨어를 위해 스칼라(Java 가상 머신에서 실행)를 부분적으로 도입하게 되었다. 트위터 사이트의 사용자 인터페이스는 2011년까지 루비 온 레일즈를 계속 사용했지만, 성능 문제로 인해 결국 다른 기술로 교체되었다.

그러나 많은 레일즈 기반 서비스 개발자들은 데이터베이스 엔진 선택, 캐시 구성 최적화, 서버 아키텍처 개선 등 시스템 아키텍처 설계를 통해 확장성 문제를 해결해왔다. 레일즈의 창시자인 데이비드 하이네마이어 핸슨은 트위터의 확장성 문제는 레일즈 자체의 결함이 아니라, 트위터의 아키텍처 설계 오류에서 비롯된 것이라고 반박했다. 그는 프레임워크 발전에 기여하지 않으면서 레일즈를 비판하는 것은 부당하다고 주장했다.

2011년 가트너 리서치는 이러한 비판과 자바와의 비교에도 불구하고, 많은 유명 소비자 웹 기업들이 확장 가능한 웹 애플리케이션을 구축하기 위해 루비 온 레일즈를 성공적으로 사용하고 있다고 보고했다. 루비 온 레일즈를 사용하는 대표적인 대규모 사이트로는 에어비앤비, 쿡패드, 깃허브, GitLab, 스크립드, 쇼피파이, 그리고 Basecamp 등이 있다. 2016년 1월 기준으로, 120만 개 이상의 웹 사이트가 루비 온 레일즈를 기반으로 운영되는 것으로 추정된다.

6.2. 보안

2012년 3월, 보안 연구원 예고르 호마코프는 특정 레일스 애플리케이션을 원격으로 악용할 수 있는 대량 할당 취약점을 발견했다. 그는 이전에 책임감 있는 공개를 시도했으나 받아들여지지 않자, 깃허브(GitHub)를 비악의적으로 해킹하여 취약점을 시연했다.

2013년 9월 24일에는 세션 쿠키 지속성 관련 보안 결함이 보고되었다. 기본 설정인 CookieStore 방식은 전체 세션 정보를 쿠키 안에 저장하기 때문에, 인증된 세션 쿠키를 확보하면 언제든 해당 사용자로 로그인할 수 있는 문제가 있었다. 이 문제를 해결하기 위해 관리자에게는 ActiveRecordStore와 같이 세션 정보를 서버에 저장하는 방식을 사용하도록 권장되었다.

연구원 다니엘 잭슨과 조셉 니어는 레일스 프로그램의 데이터 접근을 분석하고 접근 제한 규칙 준수 여부를 확인하는 "스페이스"(Space)라는 데이터 디버거를 개발했다. 2016년 4월 15일, 니어는 스페이스를 이용해 50개의 인기 웹 애플리케이션을 분석한 결과, 기존에 알려지지 않았던 23개의 보안 결함을 발견했다고 발표했다.