edge
더 많은 정보: rubyonrails.org에서 확인하세요: 더 많은 Ruby on Rails

레일즈 애플리케이션 템플릿

애플리케이션 템플릿은 새로 생성된 레일즈 프로젝트나 기존 레일즈 프로젝트에 젬, 이니셜라이저 등을 추가하는 DSL을 포함한 간단한 루비 파일입니다.

이 가이드를 읽으면 다음을 알게 됩니다:

1 사용법

템플릿을 적용하려면 -m 옵션을 사용하여 적용할 템플릿의 위치를 레일즈 생성기에 제공해야 합니다. 이는 파일 경로나 URL일 수 있습니다.

$ rails new blog -m ~/template.rb
$ rails new blog -m http://example.com/template.rb

app:template 레일즈 명령을 사용하여 기존 레일즈 애플리케이션에 템플릿을 적용할 수 있습니다. 템플릿의 위치는 LOCATION 환경 변수를 통해 전달되어야 합니다. 이는 파일 경로나 URL일 수 있습니다.

$ bin/rails app:template LOCATION=~/template.rb
$ bin/rails app:template LOCATION=http://example.com/template.rb

2 템플릿 API

레일즈 템플릿 API는 이해하기 쉽습니다. 다음은 전형적인 레일즈 템플릿의 예입니다:

# template.rb
generate(:scaffold, "person name:string")
route "root to: 'people#index'"
rails_command("db:migrate")

after_bundle do
  git :init
  git add: "."
  git commit: %Q{ -m 'Initial commit' }
end

다음 섹션에서는 API에서 제공하는 주요 메서드를 설명합니다:

2.1 gem(*args)

생성된 애플리케이션의 Gemfile에 지정된 젬에 대한 gem 항목을 추가합니다.

예를 들어, 애플리케이션이 bjnokogiri 젬에 의존하는 경우:

gem "bj"
gem "nokogiri"

이 메서드는 젬을 Gemfile에 추가하는 것만을 의미하며, 젬을 설치하지는 않습니다.

2.2 gem_group(*names, &block)

그룹 내에서 젬 항목을 랩합니다.

예를 들어, rspec-railsdevelopment 그룹과 test 그룹에서만 로드하려는 경우:

gem_group :development, :test do
  gem "rspec-rails"
end

2.3 add_source(source, options={}, &block)

지정된 소스를 생성된 애플리케이션의 Gemfile에 추가합니다.

예를 들어, "http://gems.github.com"에서 젬을 소스로 사용해야 하는 경우:

add_source "http://gems.github.com"

블록이 주어지면 블록 내의 젬 항목이 소스 그룹으로 랩됩니다.

add_source "http://gems.github.com/" do
  gem "rspec-rails"
end

2.4 environment/application(data=nil, options={}, &block)

config/application.rbApplication 클래스 내에 라인을 추가합니다.

options[:env]가 지정된 경우, 해당 파일에 라인이 추가됩니다.

environment 'config.action_mailer.default_url_options = {host: "http://yourwebsite.example.com"}', env: 'production'

data 인수 대신 블록을 사용할 수 있습니다.

2.5 vendor/lib/file/initializer(filename, data = nil, &block)

생성된 애플리케이션의 config/initializers 디렉토리에 이니셜라이저를 추가합니다.

Object#not_nil?Object#not_blank?를 사용하는 것을 좋아한다고 가정해 봅시다:

initializer 'bloatlol.rb', <<-CODE
  class Object
    def not_nil?
      !nil?
    end

    def not_blank?
      !blank?
    end
  end
CODE

마찬가지로, lib()lib/ 디렉토리에 파일을 생성하고, vendor()vendor/ 디렉토리에 파일을 생성합니다.

file()Rails.root로부터의 상대 경로를 받아 필요한 모든 디렉토리/파일을 생성합니다:

file 'app/components/foo.rb', <<-CODE
  class Foo
  end
CODE

위 코드는 app/components 디렉토리를 생성하고 그 안에 foo.rb를 넣습니다.

2.6 rakefile(filename, data = nil, &block)

지정된 작업으로 lib/tasks 아래에 새로운 rake 파일을 생성합니다:

rakefile("bootstrap.rake") do
  <<-TASK
    namespace :boot do
      task :strap do
        puts "i like boots!"
      end
    end
  TASK
end

위 코드는 boot:strap rake 작업이 있는 lib/tasks/bootstrap.rake를 생성합니다.

2.7 generate(what, *args)

지정된 레일즈 생성기를 주어진 인수로 실행합니다.

generate(:scaffold, "person", "name:string", "address:text", "age:number")

2.8 run(command)

임의의 명령을 실행합니다. 백틱과 마찬가지입니다. README.rdoc 파일을 제거하려는 경우:

run "rm README.rdoc"

2.9 rails_command(command, options = {})

레일즈 애플리케이션에서 지정된 명령을 실행합니다. 데이터베이스를 마이그레이션하려는 경우:

rails_command "db:migrate"

다른 레일즈 환경에서 명령을 실행할 수도 있습니다:

rails_command "db:migrate", env: 'production'

슈퍼 유저로 명령을 실행할 수도 있습니다:

rails_command "log:clear", sudo: true

실패할 경우 애플리케이션 생성을 중단해야 하는 명령을 실행할 수도 있습니다:

rails_command "db:migrate", abort_on_failure: true

2.10 route(routing_code)

config/routes.rb 파일에 라우팅 항목을 추가합니다. 위 단계에서 우리는 person 스캐폴드를 생성하고 README.rdoc를 제거했습니다. 이제 PeopleController#index를 애플리케이션의 기본 페이지로 만들려면:

route "root to: 'person#index'"

2.11 inside(dir)

지정된 디렉토리에서 명령을 실행할 수 있도록 합니다. 예를 들어, 새로운 앱에서 심볼릭 링크를 만들기 위해 엣지 레일즈의 사본을 사용하려는 경우: ruby inside('vendor') do run "ln -s ~/commit-rails/rails rails" end

2.12 ask(question)

ask()는 사용자로부터 피드백을 받아 템플릿에서 사용할 수 있는 기회를 제공합니다. 예를 들어 새로운 라이브러리의 이름을 사용자에게 지정하도록 하려면 다음과 같이 할 수 있습니다:

lib_name = ask("새로운 라이브러리의 이름을 지정하세요:")
lib_name << ".rb" unless lib_name.index(".rb")

lib lib_name, <<-CODE
  class Shiny
  end
CODE

2.13 yes?(question) 또는 no?(question)

이러한 메서드를 사용하여 템플릿에서 질문을 하고 사용자의 답변에 따라 흐름을 결정할 수 있습니다. 예를 들어 사용자에게 마이그레이션을 실행할 것인지 묻고 싶다면 다음과 같이 할 수 있습니다:

rails_command("db:migrate") if yes?("데이터베이스 마이그레이션을 실행하시겠습니까?")
# no?(question)는 반대로 작동합니다.

2.14 git(:command)

Rails 템플릿에서는 어떤 git 명령이든 실행할 수 있습니다:

git :init
git add: "."
git commit: "-a -m '초기 커밋'"

2.15 after_bundle(&block)

젬이 번들되고 binstub이 생성된 후에 실행될 콜백을 등록합니다. 생성된 파일을 버전 관리에 추가하는 데 유용합니다:

after_bundle do
  git :init
  git add: '.'
  git commit: "-a -m '초기 커밋'"
end

콜백은 --skip-bundle이 전달되었더라도 실행됩니다.

3 고급 사용법

애플리케이션 템플릿은 Rails::Generators::AppGenerator 인스턴스의 컨텍스트에서 평가됩니다. 이는 Thor에서 제공하는 apply 액션을 사용합니다.

이는 인스턴스를 확장하고 변경하여 필요에 맞게 맞출 수 있다는 것을 의미합니다.

예를 들어 source_paths 메서드를 덮어쓰고 템플릿의 위치를 포함하도록 설정할 수 있습니다. 이제 copy_file과 같은 메서드는 템플릿의 위치에 상대적인 경로를 허용합니다.

def source_paths
  [__dir__]
end

피드백

이 가이드의 품질을 개선하는 데 도움을 주시기를 권장합니다.

오타나 사실적인 오류를 발견하면 기여해주십시오. 시작하려면 문서 기여 섹션을 읽어보세요.

불완전한 내용이나 최신 정보가 아닌 내용을 발견할 수도 있습니다. 주요한 부분에 누락된 문서를 추가해주세요. Edge 가이드에서 이미 문제가 해결되었는지 확인하세요. 스타일과 규칙은 Ruby on Rails 가이드 지침을 확인하세요.

수정할 내용을 발견했지만 직접 수정할 수 없는 경우 이슈를 열어주세요.

마지막으로, Ruby on Rails 문서에 관한 모든 토론은 공식 Ruby on Rails 포럼에서 환영합니다.