rubyonrails.org에서 더 보기:

GitHub에서 이 파일을 읽지 마세요. 가이드는 https://guides.rubyonrails.org 에서 제공됩니다.

Rails 명령줄

이 가이드를 읽은 후에는 다음과 같은 내용을 알 수 있습니다:

  • Rails 애플리케이션을 생성하는 방법
  • model, controller, database migration, unit test를 생성하는 방법
  • 개발 서버를 시작하는 방법
  • 대화형 shell을 통해 객체를 실험하는 방법

이 튜토리얼은 Getting Started with Rails Guide를 읽고 Rails의 기본 지식이 있다고 가정합니다.

1 Rails 앱 생성하기

먼저 rails new 명령어를 사용하여 간단한 Rails 애플리케이션을 만들어보겠습니다.

이 애플리케이션을 사용하여 이 가이드에서 설명하는 모든 명령어를 실습하고 살펴볼 것입니다.

rails gem이 아직 설치되어 있지 않다면 gem install rails 명령어를 입력하여 설치할 수 있습니다.

1.1 rails new

rails new 명령어에 전달할 첫 번째 인자는 애플리케이션 이름입니다.

$ rails new my_app
     create
     create  README.md 
     create  Rakefile
     create  config.ru
     create  .gitignore
     create  Gemfile
     create  app
     ...
     create  tmp/cache
     ...
        run  bundle install

Rails는 이렇게 작은 명령어에 대해 엄청난 양의 것들을 설정합니다! 이제 간단한 애플리케이션을 바로 실행하는 데 필요한 모든 코드가 포함된 전체 Rails 디렉토리 구조를 갖게 되었습니다.

파일 생성이나 일부 라이브러리를 건너뛰고 싶다면, rails new 명령어에 다음 인자들을 추가할 수 있습니다:

인자 설명
--skip-git git init, .gitignore, .gitattributes 건너뛰기
--skip-docker Dockerfile, .dockerignore, bin/docker-entrypoint 건너뛰기
--skip-keeps 소스 컨트롤 .keep 파일들 건너뛰기
--skip-action-mailer Action Mailer 파일들 건너뛰기
--skip-action-mailbox Action Mailbox gem 건너뛰기
--skip-action-text Action Text gem 건너뛰기
--skip-active-record Active Record 파일들 건너뛰기
--skip-active-job Active Job 건너뛰기
--skip-active-storage Active Storage 파일들 건너뛰기
--skip-action-cable Action Cable 파일들 건너뛰기
--skip-asset-pipeline Asset Pipeline 건너뛰기
--skip-javascript JavaScript 파일들 건너뛰기
--skip-hotwire Hotwire 통합 건너뛰기
--skip-jbuilder jbuilder gem 건너뛰기
--skip-test 테스트 파일들 건너뛰기
--skip-system-test 시스템 테스트 파일들 건너뛰기
--skip-bootsnap bootsnap gem 건너뛰기
--skip-dev-gems 개발용 gem 추가 건너뛰기
--skip-thruster Thruster 설정 건너뛰기
--skip-rubocop RuboCop 설정 건너뛰기
--skip-brakeman brakeman 설정 건너뛰기
--skip-ci GitHub CI 파일들 건너뛰기
--skip-kamal Kamal 설정 건너뛰기
--skip-solid Solid Cache, Queue, Cable 설정 건너뛰기

이것들은 rails new가 받아들이는 옵션들의 일부일 뿐입니다. 전체 옵션 목록을 보려면 rails new --help를 입력하세요.

1.2 다른 Database 사전 구성하기

새로운 Rails 애플리케이션을 만들 때, 애플리케이션이 어떤 종류의 database를 사용할지 지정할 수 있습니다. 이를 통해 시간을 절약하고 많은 키 입력을 줄일 수 있습니다.

--database=postgresql 옵션이 어떤 역할을 하는지 살펴보겠습니다:

$ rails new petstore --database=postgresql
      create
      create  app/controllers
      create  app/helpers
...

config/database.yml에 어떤 내용이 들어갔는지 살펴봅시다:

# PostgreSQL. 9.3 이상 버전이 지원됩니다.
#
# pg 드라이버 설치:
#   gem install pg
# macOS에서 Homebrew 사용 시:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# Windows에서:
#   gem install pg
#       win32 빌드를 선택하세요.
#       PostgreSQL을 설치하고 /bin 디렉터리를 path에 추가하세요.
#
# Gemfile을 사용한 설정
# gem "pg"
#
default: &default
  adapter: postgresql
  encoding: unicode

  # 커넥션 풀링에 대한 자세한 내용은 Rails 설정 가이드를 참조하세요
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: petstore_development
...

PostgreSQL 선택에 따른 데이터베이스 설정이 생성되었습니다.

2 Command Line 기본사항

Rails를 일상적으로 사용하는데 있어 절대적으로 중요한 명령어들이 몇 가지 있습니다. 사용 빈도순으로 나열하면 다음과 같습니다:

  • bin/rails console
  • bin/rails server
  • bin/rails test
  • bin/rails generate
  • bin/rails db:migrate
  • bin/rails db:create
  • bin/rails routes
  • bin/rails dbconsole
  • rails new app_name

rails --help를 입력하면 현재 디렉토리에서 사용 가능한 rails 명령어 목록을 볼 수 있습니다. 각 명령어에는 설명이 포함되어 있어 필요한 것을 찾는데 도움이 될 것입니다.

$ rails --help
사용법:
  bin/rails COMMAND [options]

명령어를 지정해야 합니다. 가장 일반적인 명령어는 다음과 같습니다:

  generate     새로운 코드 생성 (단축 별칭: "g") 
  console      Rails 콘솔 시작 (단축 별칭: "c")
  server       Rails 서버 시작 (단축 별칭: "s")
  ...

모든 명령어는 -h (또는 --help)와 함께 실행하면 더 자세한 정보를 볼 수 있습니다.

추가로 사용할 수 있는 명령어들:
about                               모든 Rails 버전 리스트 ...
assets:clean[keep]                  오래된 컴파일된 asset 제거
assets:clobber                      컴파일된 asset 제거  
assets:environment                  asset 컴파일 환경 로드
assets:precompile                   모든 asset 컴파일 ...
...
db:fixtures:load                    fixture를 로드 ...
db:migrate                          데이터베이스 마이그레이션 ...
db:migrate:status                   마이그레이션 상태 표시
db:rollback                         스키마를 이전 버전으로 롤백 ...
db:schema:cache:clear               db/schema_cache.yml 파일 삭제
db:schema:cache:dump                db/schema_cache.yml 파일 생성
db:schema:dump                      데이터베이스 스키마 파일 생성 (db/schema.rb 또는 db/structure.sql ...)
db:schema:load                      데이터베이스 스키마 파일 로드 (db/schema.rb 또는 db/structure.sql ...)
db:seed                            시드 데이터 로드 ...
db:version                         현재 스키마 버전 조회 ...
...
restart                            앱을 터치하여 재시작 ...
tmp:create                         tmp 디렉토리 생성 ...

2.1 bin/rails server

bin/rails server 명령어는 Rails에 번들로 포함된 Puma라는 웹 서버를 실행합니다. 웹 브라우저를 통해 애플리케이션에 접근하고 싶을 때마다 이 명령어를 사용하게 될 것입니다.

추가 작업 없이, bin/rails server는 우리의 새로운 Rails 앱을 실행할 것입니다:

$ cd my_app
$ bin/rails server  
=> Puma 부팅 중
=> Rails 8.1.0 애플리케이션이 development 환경에서 시작됩니다 
=> 더 많은 시작 옵션을 보려면 `bin/rails server --help` 를 실행하세요
Puma가 단일 모드로 시작됩니다...
* Puma 버전: 6.4.0 (ruby 3.1.3-p185) ("The Eagle of Durango")
* 최소 스레드: 5
* 최대 스레드: 5
* 환경: development
* PID: 5295
* http://127.0.0.1:3000 에서 리스닝 중
* http://[::1]:3000 에서 리스닝 중
중지하려면 Ctrl-C를 누르세요

단 세 가지 명령어로 우리는 3000번 포트를 사용하는 Rails 서버를 실행했습니다. 브라우저에서 http://localhost:3000을 열면 기본적인 Rails 앱이 실행되는 것을 볼 수 있습니다.

서버를 시작하기 위해 "s" 별칭을 사용할 수도 있습니다: bin/rails s.

-p 옵션을 사용하여 서버를 다른 포트에서 실행할 수 있습니다. 기본 development 환경은 -e 옵션으로 변경할 수 있습니다.

$ bin/rails server -e production -p 4000

-b 옵션은 Rails를 지정된 IP에 바인딩하며, 기본값은 localhost입니다. -d 옵션을 전달하여 서버를 데몬으로 실행할 수 있습니다.

2.2 bin/rails generate

bin/rails generate 명령어는 템플릿을 사용하여 많은 것들을 생성합니다. bin/rails generate를 단독으로 실행하면 사용 가능한 generator들의 목록을 보여줍니다:

generator 명령어를 호출할 때 "g" 별칭을 사용할 수도 있습니다: bin/rails g.

$ bin/rails generate
사용법:
  bin/rails generate GENERATOR [args] [options]

...
...

아래에서 generator를 선택해주세요.

Rails:
  assets
  channel 
  controller
  generator
  ...
  ...

노트: generator gem, 앱에 설치할 plugin의 일부를 통해 더 많은 generator를 설치할 수 있으며, 직접 generator를 만들 수도 있습니다!

generator를 사용하면 앱 동작에 필요한 상용구 코드(boilerplate code)를 작성하는 데 많은 시간을 절약할 수 있습니다.

controller generator를 사용해서 직접 controller를 만들어봅시다. 하지만 어떤 명령어를 사용해야 할까요? generator에게 물어봅시다:

모든 Rails 콘솔 유틸리티에는 도움말이 있습니다. 대부분의 *nix 유틸리티처럼 명령어 끝에 --help 또는 -h를 추가하면 됩니다. 예: bin/rails server --help

$ bin/rails generate controller
사용법:
  bin/rails generate controller NAME [action action] [options]

...
...

설명:
    ...

    모듈 내에 controller를 생성하려면, controller 이름을 'parent_module/controller_name'과 같은 경로 형식으로 지정하세요.

    ...

예시:
    `bin/rails generate controller CreditCards open debit credit close`

    /credit_cards/debit 같은 URL을 가진 신용카드 controller.
        Controller: app/controllers/credit_cards_controller.rb
        Test:       test/controllers/credit_cards_controller_test.rb
        Views:      app/views/credit_cards/debit.html.erb [...]
        Helper:     app/helpers/credit_cards_helper.rb

controller 생성기는 generate controller ControllerName action1 action2 형식의 파라미터를 기대합니다. 우리에게 좋은 말을 해줄 hello action을 가진 Greetings controller를 만들어보겠습니다.

$ bin/rails generate controller Greetings hello
     create  app/controllers/greetings_controller.rb
      route  get 'greetings/hello'
     invoke  erb
     create    app/views/greetings
     create    app/views/greetings/hello.html.erb
     invoke  test_unit
     create    test/controllers/greetings_controller_test.rb
     invoke  helper
     create    app/helpers/greetings_helper.rb
     invoke    test_unit

이것이 전부 무엇을 생성했을까요? 이는 애플리케이션에 여러 디렉토리들이 있는지 확인했고, controller 파일, view 파일, functional test 파일, view를 위한 helper, JavaScript 파일, 그리고 stylesheet 파일을 생성했습니다.

controller를 확인하고 약간 수정해보세요 (app/controllers/greetings_controller.rb에서):

class GreetingsController < ApplicationController
  def hello
    @message = "안녕하세요, 오늘 기분은 어떠신가요?"
  end
end

그런 다음 메시지를 표시할 view입니다 (app/views/greetings/hello.html.erb):

<h1>당신을 위한 인사!</h1>
<p><%= @message %></p>

서버를 bin/rails server 명령어로 실행하세요.

$ bin/rails server
=> Booting Puma...

URL은 http://localhost:3000/greetings/hello가 됩니다.

일반적인 기본 Rails 애플리케이션에서 URL은 보통 http://(host)/(controller)/(action) 패턴을 따르며, http://(host)/(controller)와 같은 URL은 해당 controller의 index action을 실행합니다.

Rails는 데이터 model을 위한 generator도 제공합니다.

$ bin/rails generate model
사용법:
  bin/rails generate model 이름 [필드[:타입][:인덱스] 필드[:타입][:인덱스]] [옵션]

...

ActiveRecord 옵션:
      [--migration], [--no-migration]        # migration을 생성할지 여부를 지정
                                             # 기본값: true

...

설명:
    새 model을 생성합니다. model 이름은 CamelCase나
    under_score 형식으로 전달하며, 선택적으로 속성 쌍의 목록을 인자로 전달할 수 있습니다.

...

type 파라미터에서 사용할 수 있는 필드 유형 목록은 SchemaStatements 모듈의 add_column 메서드에 대한 API 문서를 참조하세요. index 파라미터는 해당 컬럼에 대한 인덱스를 생성합니다.

하지만 모델을 직접 생성하는 대신(이것은 나중에 할 것입니다), scaffold를 설정해보겠습니다. Rails의 scaffold는 모델, 해당 모델의 데이터베이스 migration, 이를 조작하기 위한 controller, 데이터를 보고 조작하기 위한 view, 그리고 이 모든 것에 대한 테스트 스위트의 전체 세트입니다.

우리가 플레이하는 비디오 게임의 최고 점수를 추적하는 "HighScore"라는 간단한 resource를 설정해보겠습니다.

$ bin/rails generate scaffold HighScore game:string score:integer
    invoke  active_record  
    create    db/migrate/20190416145729_create_high_scores.rb
    create    app/models/high_score.rb
    invoke    test_unit
    create      test/models/high_score_test.rb
    create      test/fixtures/high_scores.yml
    invoke  resource_route
     route    resources :high_scores
    invoke  scaffold_controller
    create    app/controllers/high_scores_controller.rb
    invoke    erb
    create      app/views/high_scores
    create      app/views/high_scores/index.html.erb
    create      app/views/high_scores/edit.html.erb
    create      app/views/high_scores/show.html.erb
    create      app/views/high_scores/new.html.erb
    create      app/views/high_scores/_form.html.erb
    invoke    test_unit  
    create      test/controllers/high_scores_controller_test.rb
    create      test/system/high_scores_test.rb
    invoke    helper
    create      app/helpers/high_scores_helper.rb
    invoke      test_unit
    invoke    jbuilder
    create      app/views/high_scores/index.json.jbuilder
    create      app/views/high_scores/show.json.jbuilder
    create      app/views/high_scores/_high_score.json.jbuilder

제너레이터는 HighScore를 위한 모델, 뷰, 컨트롤러, resource 라우트, 데이터베이스 마이그레이션(high_scores 테이블을 생성)을 생성합니다. 그리고 이들을 위한 테스트도 추가합니다.

마이그레이션은 우리가 migrate를 해야 합니다. 즉, 데이터베이스의 스키마를 수정하기 위해 Ruby 코드(위 출력의 20190416145729_create_high_scores.rb 파일)를 실행해야 합니다. 어떤 데이터베이스일까요? bin/rails db:migrate 명령을 실행할 때 Rails가 생성할 SQLite3 데이터베이스입니다. 이 명령에 대해서는 아래에서 더 자세히 설명하겠습니다.

$ bin/rails db:migrate
==  CreateHighScores: 마이그레이션 중 ===============================================
-- create_table(:high_scores)
   -> 0.0017s
==  CreateHighScores: 마이그레이션 완료 (0.0019s) ======================================

유닛 테스트에 대해 이야기해보겠습니다. 유닛 테스트는 코드를 테스트하고 코드에 대해 검증하는 코드입니다. 유닛 테스트에서는 코드의 작은 부분(예: 모델의 메서드)을 가져와 입력과 출력을 테스트합니다. 유닛 테스트는 여러분의 친구입니다. 코드에 유닛 테스트를 작성하면 작업 생산성이 크게 향상된다는 사실을 빨리 받아들일수록 좋습니다. 정말입니다. 유닛 테스트에 대한 자세한 내용은 테스팅 가이드를 참조하세요.

Rails가 우리를 위해 만든 인터페이스를 살펴보겠습니다.

$ bin/rails server

브라우저를 열고 http://localhost:3000/high_scores로 이동하면, 이제 새로운 high score를 생성할 수 있습니다 (Space Invaders에서 55,160점!)

2.3 bin/rails console

console 명령어를 사용하면 명령줄에서 Rails 애플리케이션과 상호작용할 수 있습니다. 내부적으로 bin/rails console은 IRB를 사용하므로, IRB를 사용해본 적이 있다면 익숙할 것입니다. 이는 코드로 빠른 아이디어를 테스트하고 웹사이트를 건드리지 않고 서버 측 데이터를 변경하는 데 유용합니다.

console을 실행할 때 "c" 별칭을 사용할 수도 있습니다: bin/rails c

console 명령어가 작동할 환경을 지정할 수 있습니다.

$ bin/rails console -e staging

데이터를 변경하지 않고 코드를 테스트하고 싶다면, bin/rails console --sandbox를 호출하여 실행할 수 있습니다.

$ bin/rails console --sandbox
sandbox에서 development 환경을 로딩 중 (Rails 8.1.0)
종료 시 모든 수정사항이 롤백됩니다
irb(main):001:0>

2.3.1 apphelper Objects

bin/rails console 내부에서는 apphelper 인스턴스에 접근할 수 있습니다.

app 메서드를 사용하면 named route helper에 접근할 수 있으며, request를 수행할 수 있습니다.

irb> app.root_path
=> "/"

irb> app.get _
"/" 경로로 127.0.0.1에서 GET 요청이 2014-06-19 10:41:57 -0300에 시작되었습니다
...

helper 메서드를 사용하면 Rails와 애플리케이션의 helper들에 접근할 수 있습니다.

irb> helper.time_ago_in_words 30.days.ago
=> "약 1개월"

irb> helper.my_custom_helper
=> "나의 커스텀 helper"

2.4 bin/rails dbconsole

bin/rails dbconsole은 사용 중인 데이터베이스를 파악하고 해당 데이터베이스의 명령줄 인터페이스로 이동시켜줍니다(명령줄 매개변수도 자동으로 설정합니다!). MySQL(MariaDB 포함), PostgreSQL, SQLite3를 지원합니다.

dbconsole을 실행하기 위해 "db" 별칭을 사용할 수도 있습니다: bin/rails db.

여러 데이터베이스를 사용하는 경우, bin/rails dbconsole은 기본적으로 primary 데이터베이스에 연결됩니다. --database 또는 --db를 사용하여 연결할 데이터베이스를 지정할 수 있습니다:

$ bin/rails dbconsole --database=animals

2.5 bin/rails runner

runner는 Rails console을 열지 않고 비대화형으로 Rails 애플리케이션의 컨텍스트에서 Ruby 코드를 실행합니다. 예를 들면:

$ bin/rails runner "Model.long_running_method"

runner를 실행하기 위해 "r" 별칭을 사용할 수도 있습니다: bin/rails r

-e 스위치를 사용하여 runner 명령이 동작할 environment를 지정할 수 있습니다.

$ bin/rails runner -e staging "Model.long_running_method"

runner를 사용하면 파일에 작성된 ruby 코드도 실행할 수 있습니다.

$ bin/rails runner lib/code_to_be_run.rb

기본적으로 rails runner 스크립트는 Rails Executor로 자동으로 감싸지며, 이는 cron job과 같은 작업에서 잡히지 않은 예외를 보고하는 데 도움을 줍니다.

따라서 rails runner lib/long_running_scripts.rb를 실행하는 것은 다음과 기능적으로 동일합니다:

Rails.application.executor.wrap do
  # lib/long_running_scripts.rb 내부의 코드를 실행합니다
end

--skip-executor 옵션을 사용하면 이 동작을 생략할 수 있습니다.

$ bin/rails runner --skip-executor lib/long_running_script.rb

이 명령어는 executor를 건너뛰고 script를 실행합니다.

2.6 bin/rails destroy

destroygenerate의 반대라고 생각하세요. generate가 무엇을 했는지 파악하고 그것을 취소합니다.

destroy 명령어를 실행할 때 별칭인 "d"를 사용할 수도 있습니다: bin/rails d.

$ bin/rails generate model Oops
      invoke  active_record
      create    db/migrate/20120528062523_create_oops.rb
      create    app/models/oops.rb
      invoke    test_unit
      create      test/models/oops_test.rb
      create      test/fixtures/oops.yml
$ bin/rails destroy model Oops
      invoke  active_record 
      remove    db/migrate/20120528062523_create_oops.rb
      remove    app/models/oops.rb
      invoke    test_unit
      remove      test/models/oops_test.rb
      remove      test/fixtures/oops.yml

2.7 bin/rails about

bin/rails about는 Ruby, RubyGems, Rails, Rails 하위 컴포넌트, 애플리케이션 폴더, 현재 Rails 환경 이름, 앱의 database adapter, schema 버전에 대한 정보를 제공합니다. 도움이 필요하거나, 보안 패치가 영향을 미칠 수 있는지 확인하거나, 기존 Rails 설치에 대한 통계가 필요할 때 유용합니다.

$ bin/rails about
애플리케이션 환경 정보
Rails 버전              8.1.0
Ruby 버전               3.2.0 (x86_64-linux) 
RubyGems 버전           3.3.7
Rack 버전               3.0.8
JavaScript Runtime      Node.js (V8)
Middleware:             ActionDispatch::HostAuthorization, Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, ActionDispatch::ServerTiming, ActiveSupport::Cache::Strategy::LocalCache::Middleware, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Sprockets::Rails::QuietAssets, Rails::Rack::Logger, ActionDispatch::ShowExceptions, WebConsole::Middleware, ActionDispatch::DebugExceptions, ActionDispatch::ActionableExceptions, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ContentSecurityPolicy::Middleware, ActionDispatch::PermissionsPolicy::Middleware, Rack::Head, Rack::ConditionalGet, Rack::ETag, Rack::TempfileReaper
애플리케이션 루트        /home/foobar/my_app
환경                    development
데이터베이스 어댑터      sqlite3
데이터베이스 스키마 버전  20180205173523

2.8 bin/rails assets:

bin/rails assets:precompile을 사용하여 app/assets의 asset들을 사전 컴파일할 수 있으며, bin/rails assets:clean을 사용하여 이전에 컴파일된 asset들을 제거할 수 있습니다. assets:clean 명령어는 새로운 asset이 빌드되는 동안 이전 asset에 계속 연결될 수 있는 롤링 배포를 허용합니다.

public/assets를 완전히 지우고 싶다면 bin/rails assets:clobber를 사용할 수 있습니다.

2.9 bin/rails db:

db: rails namespace의 가장 일반적인 명령어는 migratecreate이며, 모든 마이그레이션 rails 명령어(up, down, redo, reset)를 사용해보는 것이 도움이 될 것입니다. bin/rails db:version은 문제 해결 시 유용하며 데이터베이스의 현재 버전을 알려줍니다.

마이그레이션에 대한 자세한 내용은 Migrations 가이드에서 확인할 수 있습니다.

2.10 bin/rails notes

bin/rails notes는 특정 키워드로 시작하는 주석을 코드에서 검색합니다. 사용법에 대한 정보는 bin/rails notes --help를 참고할 수 있습니다.

기본적으로 app, config, db, lib, test 디렉토리에서 FIXME, OPTIMIZE, TODO 주석을 검색하며, 확장자가 .builder, .rb, .rake, .yml, .yaml, .ruby, .css, .js, .erb인 파일들을 대상으로 합니다.

$ bin/rails notes
app/controllers/admin/users_controller.rb:
  * [ 20] [TODO] 이걸 다른 방법으로 할 수 있나요?
  * [132] [FIXME] 다음 배포 때 높은 우선순위로 처리

lib/school.rb:
  * [ 13] [OPTIMIZE] 더 빠르게 하기 위해 이 코드 리팩토링 필요
  * [ 17] [FIXME]

2.10.1 Annotations

--annotations 인자를 사용하여 특정 annotation을 전달할 수 있습니다. 기본적으로는 FIXME, OPTIMIZE 그리고 TODO를 검색합니다. Annotation은 대소문자를 구분한다는 점에 유의하세요.

$ bin/rails notes --annotations FIXME RELEASE
app/controllers/admin/users_controller.rb:
  * [101] [RELEASE] 다음 release 전에 이것을 확인해야 합니다
  * [132] [FIXME] 다음 배포에서 높은 우선순위

lib/school.rb:
  * [ 17] [FIXME]

2.10.2 Tags

config.annotations.register_tags를 사용하여 검색할 기본 태그를 추가할 수 있습니다. 이는 태그 목록을 받습니다.

config.annotations.register_tags("DEPRECATEME", "TESTME")

register_tags 메서드를 사용하여 추가 주석 태그를 등록할 수 있습니다.

$ bin/rails notes
app/controllers/admin/users_controller.rb:
  * [ 20] [TODO] 이것에 대해 A/B 테스트 수행하기
  * [ 42] [TESTME] 더 많은 기능 테스트가 필요함
  * [132] [DEPRECATEME] 다음 릴리스에서 이 메소드가 deprecate 되는지 확인

2.10.3 Directories

config.annotations.register_directories를 사용하여 검색할 기본 디렉터리를 추가할 수 있습니다. 이는 디렉터리 이름의 목록을 받습니다.

config.annotations.register_directories("spec", "vendor")

추가 디렉토리들을 source annotation 추출기에 등록합니다.

$ bin/rails notes
app/controllers/admin/users_controller.rb:
  * [ 20] [TODO] 이걸 처리할 다른 방법이 있을까?
  * [132] [FIXME] 다음 배포에서 최우선순위로 처리 필요

lib/school.rb:
  * [ 13] [OPTIMIZE] 성능 향상을 위해 이 코드 리팩토링 필요
  * [ 17] [FIXME]

spec/models/user_spec.rb:
  * [122] [TODO] 구독이 있는 사용자에 대해 검증 필요

vendor/tools.rb:
  * [ 56] [TODO] 이 의존성 제거 필요

2.10.4 Extensions

config.annotations.register_extensions를 사용하여 검색할 기본 파일 확장자를 더 추가할 수 있습니다. 이는 매칭할 정규식과 함께 확장자 목록을 전달받습니다.

config.annotations.register_extensions("scss", "sass") { |annotation| /\/\/\s*(#{annotation}):?\s*(.*)$/ }

"scss" 및 "sass" 파일 확장자에 대한 주석 패턴을 등록합니다. 이는 "//" 스타일의 주석을 찾습니다.

$ bin/rails notes
app/controllers/admin/users_controller.rb:
  * [ 20] [TODO] 다른 방법이 있을까요?
  * [132] [FIXME] 다음 배포 시 높은 우선순위로 처리

app/assets/stylesheets/application.css.sass:
  * [ 34] [TODO] 이 클래스에 pseudo element 사용하기

app/assets/stylesheets/application.css.scss:
  * [  1] [TODO] 여러 component로 분리하기

lib/school.rb:
  * [ 13] [OPTIMIZE] 성능 향상을 위해 이 코드 리팩토링 필요
  * [ 17] [FIXME]

spec/models/user_spec.rb:
  * [122] [TODO] subscription이 있는 사용자가 정상 동작하는지 확인

vendor/tools.rb:
  * [ 56] [TODO] 이 dependency 제거하기

2.11 bin/rails routes

bin/rails routes는 정의된 모든 route를 나열합니다. 이는 앱의 routing 문제를 해결하거나, 익숙해지려는 앱의 URL들을 전반적으로 파악하는 데 유용합니다.

2.12 bin/rails test

Rails에서의 unit testing에 대한 자세한 설명은 Rails 어플리케이션 테스팅 가이드에서 확인할 수 있습니다.

Rails는 minitest라는 test framework와 함께 제공됩니다. Rails는 테스트 사용을 통해 안정성을 유지합니다. test: namespace에서 사용할 수 있는 명령어들은 여러분이 작성할 다양한 테스트를 실행하는 데 도움이 됩니다.

2.13 bin/rails tmp:

Rails.root/tmp 디렉토리는 *nix의 /tmp 디렉토리와 같이 프로세스 id 파일과 캐시된 액션과 같은 임시 파일들을 보관하는 장소입니다.

tmp: 네임스페이스 명령어들은 Rails.root/tmp 디렉토리를 정리하고 생성하는데 도움을 줍니다:

  • bin/rails tmp:cache:cleartmp/cache를 정리합니다.
  • bin/rails tmp:sockets:cleartmp/sockets를 정리합니다.
  • bin/rails tmp:screenshots:cleartmp/screenshots를 정리합니다.
  • bin/rails tmp:clear는 모든 cache, sockets, screenshot 파일들을 정리합니다.
  • bin/rails tmp:create는 cache, sockets, pids를 위한 tmp 디렉토리들을 생성합니다.

2.14 기타

  • bin/rails initializers는 Rails가 호출하는 순서대로 모든 정의된 initializer들을 출력합니다.
  • bin/rails middleware는 앱에서 활성화된 Rack middleware 스택을 나열합니다.
  • bin/rails stats는 코드의 통계를 확인하는데 유용하며, KLOCs(코드 라인 수 천 단위)와 코드 대비 테스트 비율과 같은 정보를 표시합니다.
  • bin/rails secret은 세션 secret으로 사용할 수 있는 의사 난수 키를 제공합니다.
  • bin/rails time:zones:all은 Rails가 알고 있는 모든 timezone을 나열합니다.
  • bin/rails boot는 애플리케이션을 부팅하고 종료합니다.

2.15 Custom Rake Tasks

Custom rake task는 .rake 확장자를 가지며 Rails.root/lib/tasks에 위치합니다. 이러한 custom rake task는 bin/rails generate task 명령어를 통해 생성할 수 있습니다.

desc "제 멋진 태스크에 대한 짧지만 포괄적인 설명입니다"
task task_name: [:prerequisite_task, :another_task_we_depend_on] do
  # 여기에 모든 매직을 작성하세요
  # 유효한 Ruby 코드는 모두 허용됩니다
end

커스텀 rake task에 인자를 전달하려면:

task :task_name, [:arg_1] => [:prerequisite_1, :prerequisite_2] do |task, args|
  argument_1 = args.arg_1
end

namespace로 묶어서 task들을 그룹화할 수 있습니다:

namespace :db do
  desc "이 태스크는 아무것도 하지 않습니다"
  task :nothing do
    # 진짜로 아무것도 안 함
  end
end

task들의 실행은 다음과 같이 보일 것입니다:

$ bin/rails task_name
$ bin/rails "task_name[value 1]" # 전체 인수 문자열은 따옴표로 묶어야 합니다
$ bin/rails "task_name[value 1,value2,value3]" # 여러 인수는 쉼표로 구분합니다 
$ bin/rails db:nothing

애플리케이션 모델과 상호작용하거나 database 쿼리를 수행하는 등의 작업이 필요한 경우, 애플리케이션 코드를 로드하는 environment task에 의존해야 합니다.

task task_that_requires_app_code: [:environment] do
  User.create!
end

application 코드를 필요로 하는 task가 있다면 위처럼 작성하면 됩니다.



맨 위로