Ubuntu 22.04에서 Ruby on Rails 애플리케이션을 구축하는 방법


소개

루비. 공통 목표가 있는 개발자에게 집합 규칙이 가장 적합하다고 가정하여 응용 프로그램 개발에 대한 독단적인 접근 방식을 취합니다. 따라서 Rails는 대부분의 웹 애플리케이션에 필요한 기본 기능을 제공하기 위해 라우팅, 상태 저장 데이터, 자산 관리 등을 처리하기 위한 규칙을 제공합니다.

Rails는 불필요하게 반복되는 것을 따릅니다.

이 자습서에서는 사용자가 상어와 상어의 행동에 대한 정보를 게시할 수 있는 Rails 애플리케이션을 빌드합니다. 이 프로젝트는 향후 애플리케이션 개발을 위한 출발점이 될 것입니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • Ubuntu 22.04를 실행하는 로컬 시스템 또는 개발 서버. 개발 머신에는 관리 권한이 있는 루트가 아닌 사용자와 ufw로 구성된 방화벽이 있어야 합니다. 이를 설정하는 방법에 대한 지침은 Ubuntu 22.04 자습서로 초기 서버 설정을 참조하세요.
  • Ubuntu 22.04에 Node.js를 설치하는 방법
  • Ruby, Ubuntu 22.04에서 rbenv로 Ruby on Rails를 설치하는 방법. 이 튜토리얼은 Ruby 3.2.0, rbenv 1.2.0-52 및 Rails 7.0.4를 사용합니다.

Node.js, Ruby, rbenv 및 Rails가 설치되면 애플리케이션용 데이터베이스를 설치할 준비가 된 것입니다.

1단계 - SQLite3 설치

Rails shark 애플리케이션을 만들기 전에 사용자 데이터를 저장할 데이터베이스가 필요합니다. Rails는 기본적으로 SQLite를 사용하도록 구성되어 있으며 이는 종종 개발에서 좋은 선택입니다. 응용 프로그램 데이터에는 높은 수준의 프로그래밍 확장성이 필요하지 않으므로 SQLite는 응용 프로그램의 요구 사항을 충족합니다.

먼저 터미널 내에서 패키지 색인을 업데이트합니다.

  1. sudo apt update

다음으로 sqlite3libsqlite3-dev 패키지를 설치합니다.

  1. sudo apt install sqlite3 libsqlite3-dev

이렇게 하면 SQLite와 필요한 개발 파일이 모두 설치됩니다.

버전을 확인하여 설치가 성공했는지 확인할 수 있습니다.

  1. sqlite3 --version
Output
3.37.2 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5dalt1

SQLite가 설치되면 애플리케이션 개발을 시작할 준비가 된 것입니다.

2단계 — 새 Rails 프로젝트 만들기

데이터베이스가 설치되어 있으면 새 Rails 프로젝트를 만들고 rails new 명령을 사용하여 Rails가 제공하는 기본 상용구 코드 중 일부에 액세스할 수 있습니다.

다음 명령을 사용하여 sharkapp라는 프로젝트를 만듭니다.

  1. rails new sharkapp

출력은 Rails가 새 프로젝트를 위해 생성하는 모든 다른 것을 나타냅니다. 다음 출력은 몇 가지 중요한 파일, 디렉터리 및 명령을 강조 표시합니다.

Output
create . . . create Gemfile . . . create app . . . create app/controllers/application_controller.rb . . . create app/models/application_record.rb . . . create app/views/layouts/application.html.erb . . . create config create config/routes.rb create config/application.rb . . . create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb . . . create config/database.yml create db create db/seeds.rb . . . run bundle install . . . Bundle complete! 15 Gemfile dependencies, 69 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. . . .

다음은 생성된 일부 Rails 파일 및 폴더에 대한 간략한 설명입니다.

  • Gemfile: 이 파일은 애플리케이션의 gem 의존성을 나열합니다. gem은 Ruby 소프트웨어 패키지이며 Gemfile을 사용하면 프로젝트의 소프트웨어 요구 사항을 관리할 수 있습니다.
  • app: app 디렉토리는 기본 애플리케이션 코드가 있는 곳입니다. 여기에는 애플리케이션 자체를 구성하는 모델, 컨트롤러, 보기, 자산, 헬퍼 및 메일러가 포함됩니다. Rails는 MVC 모델이 app/models/application_record.rb, app/controllers/application_controller.rb 및 <와 같은 파일에서 시작할 수 있도록 애플리케이션 수준의 상용구를 제공합니다. code>app/views/layouts/application.html.erb.
  • config: 이 디렉토리에는 애플리케이션의 구성 설정이 포함되어 있습니다.\n
    • config/routes.rb: 애플리케이션의 경로 선언이 이 파일에 있습니다.
    • config/application.rb: 애플리케이션 구성 요소에 대한 일반 설정은 이 파일에 있습니다.

    마지막으로 Rails는 bundle install 명령을 실행하여 Gemfile에 나열된 종속 항목을 설치합니다.

    모든 것이 설정되면 새 sharkapp 디렉토리로 이동합니다.

    1. cd sharkapp

    sharkapp 디렉토리 내에서 Rails 서버를 시작하여 rails server 명령을 사용하여 애플리케이션이 작동하는지 확인합니다. 로컬 컴퓨터에서 작업 중인 경우 다음 코드를 입력하여 서버를 시작합니다.

    1. rails server

    Rails는 기본적으로 localhost에 바인딩됩니다. 즉, 브라우저에서 locahost:3000으로 이동하여 애플리케이션에 액세스할 수 있습니다.

    개발 서버에서 작업하는 경우 먼저 3000 포트에서 연결이 허용되는지 확인하십시오.

    1. sudo ufw allow 3000

    그런 다음 --binding 플래그로 서버를 시작하여 서버 IP 주소에 바인딩합니다.

    1. rails server --binding=your_server_ip

    브라우저에서 http://your_server_ip:3000으로 이동하여 기본 Rails 랜딩 페이지에 액세스합니다.

    준비가 되면 터미널에서 CTRL+C를 눌러 서버를 중지할 수 있습니다.

    애플리케이션이 생성되고 배치되면 고유한 애플리케이션을 생성하기 위해 Rails 상용구에서 구축을 시작할 준비가 된 것입니다.

    3단계 - 애플리케이션 스캐폴딩

    상어 응용 프로그램을 만들려면 응용 프로그램 데이터를 관리하기 위한 모델, 해당 데이터와 사용자 상호 작용을 가능하게 하는 보기컨트롤러를 만들어야 합니다. > 모델과 뷰 간의 통신을 관리합니다. 이를 빌드하려면 rails generate scaffold 명령을 사용하세요. 이렇게 하면 애플리케이션에 대한 모델, CRUD(Create, Read, Update, and Delete) 작업, 그리고 부분, 헬퍼 및 테스트에 대한 템플릿이 생성됩니다.

    generate scaffold 명령은 내부적으로 많은 작업을 수행합니다. 명령에는 모델 이름과 데이터베이스 테이블에서 원하는 필드가 포함됩니다. Rails는 Ruby 클래스를 사용하는 동시에 ActiveRecord::Base 클래스도 상속합니다. 이는 Ruby 클래스로 작업하는 것과 동일한 방식으로 모델 클래스로 작업할 수 있음을 의미합니다. 또한 Active Record에서 메서드를 가져올 수도 있습니다. Active Record는 각 클래스가 데이터베이스의 테이블에 매핑되고 해당 클래스의 각 인스턴스가 해당 테이블의 행에 매핑되도록 합니다.

    다음 명령을 실행하여 Shark 모델, 컨트롤러 및 관련 보기를 생성합니다.

    1. rails generate scaffold Shark name:string facts:text

    이 명령의 name:stringfacts:text 옵션은 데이터베이스 테이블에서 만들고 있는 필드와 수락해야 하는 데이터 유형을 나타냅니다. 둘 다 원하는 것을 입력할 수 있는 공간을 제공합니다. text 옵션은 더 많은 문자를 허용합니다.

    이 명령을 입력하면 생성된 모든 다른 파일이 출력에 표시됩니다.

    Output
    invoke active_record create db/migrate/20190804181822_create_sharks.rb create app/models/shark.rb . . . invoke resource_route route resources :sharks invoke scaffold_controller create app/controllers/sharks_controller.rb invoke erb create app/views/sharks create app/views/sharks/index.html.erb create app/views/sharks/edit.html.erb create app/views/sharks/show.html.erb create app/views/sharks/new.html.erb create app/views/sharks/_form.html.erb . . .

    Rails는 app/models/shark.rb에서 모델을 생성했고 이에 따라 데이터베이스 마이그레이션을 수행했습니다. . 마이그레이션 파일의 타임스탬프는 예제 출력과 다릅니다.

    또한 app/controllers/sharks_controller.rb 컨트롤러와 app/views/sharks에 수집된 애플리케이션의 CRUD 작업과 관련된 뷰를 생성했습니다. 이러한 보기 중에는 여러 보기에서 사용되는 코드를 포함하는 부분인 _form.html.erb가 있습니다.

    마지막으로 Rails는 config/routes.rb에 리소스가 풍부한 새 경로인 resources :sharks를 추가했습니다. 이렇게 하면 Rails 라우터가 들어오는 HTTP 요청을 sharks 컨트롤러 및 관련 보기와 일치시킬 수 있습니다.

    Rails가 애플리케이션 코드를 구축하는 많은 작업을 수행했지만 어떤 일이 일어나고 있는지 더 잘 이해하기 위해 일부 파일을 살펴볼 가치가 있습니다.

    컨트롤러 파일을 이해하려면 터미널에 다음 명령을 입력하십시오.

    1. cat app/controllers/sharks_controller.rb
    Output
    class SharksController < ApplicationController before_action :set_shark, only: %i[ show edit update destroy ] # GET /sharks or /sharks.json def index @sharks = Shark.all end # GET /sharks/1 or /sharks/1.json def show end # GET /sharks/new def new @shark = Shark.new end # GET /sharks/1/edit def edit end # POST /sharks or /sharks.json def create @shark = Shark.new(shark_params) respond_to do |format| if @shark.save format.html { redirect_to shark_url(@shark), notice: "Shark was successfully created." } format.json { render :show, status: :created, location: @shark } else format.html { render :new, status: :unprocessable_entity } format.json { render json: @shark.errors, status: :unprocessable_entity } end end end # PATCH/PUT /sharks/1 or /sharks/1.json def update respond_to do |format| if @shark.update(shark_params) format.html { redirect_to shark_url(@shark), notice: "Shark was successfully updated." } format.json { render :show, status: :ok, location: @shark } else format.html { render :edit, status: :unprocessable_entity } format.json { render json: @shark.errors, status: :unprocessable_entity } end end end # DELETE /sharks/1 or /sharks/1.json def destroy @shark.destroy respond_to do |format| format.html { redirect_to sharks_url, notice: "Shark was successfully destroyed." } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_shark @shark = Shark.find(params[:id]) end # Only allow a list of trusted parameters through. def shark_params params.require(:shark).permit(:name, :facts) end end

    컨트롤러는 정보를 가져오고 관련 모델로 전달하는 방법과 특정 보기와 연결하는 방법을 관리합니다. 예를 들어 sharks 컨트롤러에는 표준 CRUD 작업에 대략적으로 매핑되는 일련의 메서드가 포함되어 있습니다. 오류 발생 시 효율성을 높이기 위해 CRUD 함수보다 더 많은 방법이 있습니다.

    예를 들어, create 메소드를 고려하십시오.

    . . .
      def create
        @shark = Shark.new(shark_params)
    
        respond_to do |format|
          if @shark.save
            format.html { redirect_to @shark, notice: 'Shark was successfully created.' }
            format.json { render :show, status: :created, location: @shark }
          else
            format.html { render :new }
            format.json { render json: @shark.errors, status: :unprocessable_entity }
          end
        end
      end
    . . . 
    

    Shark 클래스의 새 인스턴스가 성공적으로 저장되면 redirect_to는 컨트롤러로 전달되는 새 요청을 생성합니다. 이것은 GET 요청이며 최근에 추가한 입력을 사용자에게 표시하는 show 메서드에 의해 처리됩니다.

    오류가 발생하면 Rails는 라우터에 다른 요청을 하는 대신 app/views/sharks/new.html.erb 템플릿을 다시 렌더링하여 사용자가 데이터를 제출할 수 있는 또 다른 기회를 제공합니다.

    sharks 컨트롤러 외에도 Rails는 컨트롤러의 index 메서드에 매핑되는 index 보기용 템플릿을 만들었습니다. 이것을 응용 프로그램의 루트 보기로 사용합니다.

    다음 명령을 실행하여 파일을 출력합니다.

    1. cat app/views/sharks/index.html.erb
    Output
    <p style="color: green"><%= notice %></p> <h1>Sharks</h1> <div id="sharks"> <% @sharks.each do |shark| %> <%= render shark %> <p> <%= link_to "Show this shark", shark %> </p> <% end %> </div> <%= link_to "New shark", new_shark_path %>

    index 보기는 데이터베이스의 sharks 테이블에 매핑되는 Shark 클래스의 인스턴스를 순환합니다. ERB 템플릿을 사용하여 보기는 개별 상어 인스턴스와 연결된 테이블의 각 필드(namefacts)를 출력합니다.

    그런 다음 뷰는 rails generate scaffold 명령으로 sharks 자원 경로를 정의할 때 사용할 수 있게 된 헬퍼를 사용합니다.

    new 보기는 부분이라고 하는 것을 사용합니다. 다음을 실행하여 app/views/sharks/new.html.erb 템플릿을 반환합니다.

    1. cat app/views/sharks/new.html.erb
    Output
    <h1>New shark</h1> <%= render "form", shark: @shark %> <br> <div> <%= link_to "Back to sharks", sharks_path %> </div>

    이 템플릿은 새 상어 항목에 대한 입력 필드가 없는 것처럼 보일 수 있지만 렌더링 양식에 대한 참조는 템플릿이 _form.html.erb 부분을 가져오고 있음을 나타냅니다. 뷰에서 반복되는 코드를 추출합니다.

    _form.html.erb 파일을 출력하여 새 상어 인스턴스가 생성되는 방법을 더 잘 이해할 수 있습니다.

    1. cat app/views/sharks/_form.html.erb
    Output
    <%= form_with(model: shark) do |form| %> <% if shark.errors.any? %> <div style="color: red"> <h2><%= pluralize(shark.errors.count, "error") %> prohibited this shark from being saved:</h2> <ul> <% shark.errors.each do |error| %> <li><%= error.full_message %></li> <% end %> </ul> </div> <% end %> <div> <%= form.label :name, style: "display: block" %> <%= form.text_field :name %> </div> <div> <%= form.label :facts, style: "display: block" %> <%= form.text_area :facts %> </div> <div> <%= form.submit %> </div> <% end %>

    이 템플릿은 양식 도우미를 사용합니다. 양식 도우미는 특정 모델의 필드와 범위를 사용하여 사용자 입력에서 새 개체를 쉽게 만들 수 있도록 설계되었습니다. 이 예에서 form_withmodel: shark를 인수로 사용하고 생성되는 새 양식 작성기 개체에는 sharks의 필드에 해당하는 필드 입력이 있습니다. 테이블. 이는 사용자가 상어 이름과 상어 사실을 모두 입력할 수 있는 양식 필드가 있음을 의미합니다.

    이 양식을 제출하면 애플리케이션의 나머지 부분이 params 메소드를 통해 액세스할 수 있는 사용자 데이터가 포함된 JSON 응답이 생성됩니다. 이렇게 하면 해당 데이터로 ActionController::Parameters 객체가 생성됩니다.

    이제 rails generate scaffold가 무엇을 생성했는지 알았으므로 애플리케이션의 루트 보기 설정으로 이동할 수 있습니다.

    4단계 - 애플리케이션 루트 뷰 생성 및 기능 테스트

    이상적으로는 사용자가 애플리케이션의 목적을 즉시 파악할 수 있도록 애플리케이션의 랜딩 페이지가 애플리케이션의 루트에 매핑되기를 원합니다.

    예를 들어 Welcome 컨트롤러와 관련 index 뷰를 생성하여 사용자에게 애플리케이션의 다른 부분으로 연결될 수 있는 일반 랜딩 페이지를 제공할 수 있습니다.

    이를 설정하려면 config/routes.rb에서 라우팅 설정을 수정하여 애플리케이션의 루트를 지정해야 합니다.

    nano 또는 좋아하는 편집기를 사용하여 편집할 config/routes.rb를 엽니다.

    1. nano config/routes.rb
    Rails.application.routes.draw do
      resources :sharks
      # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
    
      # Defines the root path route ("/")
      # root "articles#index"
    end
    

    더 구체적으로 설정하지 않으면 http://localhost:3000 또는 http://your_server_ip:3000의 기본 보기가 기본값이 됩니다. 레일스 환영 페이지.

    응용 프로그램의 루트 뷰를 sharks 컨트롤러의 index 뷰에 매핑하려면 #articleshark로 교체:

    Rails.application.routes.draw do
      resources :sharks
    
      root 'sharks#index' 
      # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
    end
    

    파일을 저장하고 편집이 끝나면 편집기를 종료하십시오. nano를 사용하여 파일을 종료한 경우 CTRL+X, Y를 누른 다음 ENTER를 누르십시오.

    이제 사용자가 애플리케이션 루트로 이동할 때 기본 Rails 랜딩 페이지가 아닌 상어 랜딩 페이지로 들어갑니다. 또한 이제 새 상어 항목을 만들고 기존 항목을 검토하고 주어진 항목을 편집하거나 삭제할 수 있습니다.

    그런 다음 다음 명령을 사용하여 마이그레이션을 실행합니다.

    1. rails db:migrate

    이 출력은 마이그레이션을 확인합니다.

    Output
    == 20230124215633 CreateSharks: migrating ===================================== -- create_table(:sharks) -> 0.0041s == 20230124215633 CreateSharks: migrated (0.0045s) ============================

    Rails 서버를 다시 시작하십시오. 로컬에서 작업하는 경우 다음을 실행합니다.

    1. rails s

    개발 서버에서 다음을 실행합니다.

    1. rails s --binding=your_server_ip

    로컬에서 작업 중인 경우 localhost:3000으로 이동하고 개발 서버에서 작업 중인 경우 http://your_server_ip:3000로 이동하여 새 방문 페이지에 액세스:

    새 상어를 만들려면 새 상어 링크를 클릭하십시오. 이 링크는 sharks/new 경로로 이동합니다.

    일부 정보를 추가하여 애플리케이션을 테스트할 수 있습니다. Name 필드에 "Great White\를 입력하고 Facts 필드에 "Scary\를 입력합니다.

    그런 다음 상어 만들기 버튼을 눌러 상어를 만듭니다.

    이 버튼은 before_action 필터 덕분에 set_shark 메서드로 설정되는 show 경로로 안내합니다. 생성한 상어의 >id:

    class SharksController < ApplicationController
      before_action :set_shark, only: %i[ show edit update destroy ]
    
      . . . 
      # GET /sharks/1 or /sharks/1.json
      def show
      end
    
      . . . 
    
      private
        # Use callbacks to share common setup or constraints between actions.
        def set_shark
          @shark = Shark.find(params[:id])
        end
      . . .
    

    상어 항목에서 이 상어 편집을 눌러 편집 기능을 테스트할 수 있습니다. 그러면 해당 상어의 edit 경로로 이동합니다.

    백상어에 대한 사실을 업데이트하여 "Scary\ 대신 "Large\로 읽은 다음 Update Shark를 누르십시오. 이렇게 하면 show 경로로 돌아갑니다.

    마지막으로 Back to sharks를 누르면 업데이트된 색인 보기로 이동합니다.

    이제 애플리케이션의 기본 기능을 테스트했으므로 일부 유효성 검사 및 보안 검사를 추가하여 모든 것을 더 안전하게 만들 수 있습니다.

    5단계 - 검증 추가

    상어 응용 프로그램은 사용자의 입력을 받을 수 있지만 사용자가 사실을 추가하지 않고 상어를 만들려고 시도하거나 이미 데이터베이스에 있는 상어에 대한 항목을 만드는 경우를 상상해 보십시오. 모델에 유효성 검사를 추가하여 데이터가 데이터베이스에 입력되기 전에 데이터를 확인하는 메커니즘을 만들 수 있습니다. 애플리케이션의 로직은 해당 모델에 있으므로 거기에서 입력된 데이터의 유효성을 검사하는 것이 적절합니다.

    이 자습서에서는 유효성 검사 테스트 작성을 다루지 않지만 Rails 설명서를 참조하여 테스트에 대해 자세히 알아볼 수 있습니다.

    아직 서버를 중지하지 않은 경우 터미널에서 CTRL+C를 눌러 지금 서버를 중지하십시오.

    shark.rb 모델 파일을 엽니다.

    1. nano app/models/shark.rb

    현재 이 파일은 Shark 클래스가 ApplicationRecord에서 상속되고, 이는 다시 ActiveRecord::Base에서 상속됨을 알려줍니다.

    class Shark < ApplicationRecord
    end
    

    name 필드에 몇 가지 유효성 검사를 추가하여 필드가 채워지고 항목이 고유하여 중복 항목을 방지하는지 확인합니다.

    class Shark < ApplicationRecord
      validates :name, presence: true, uniqueness: true
    end
    

    다음으로 facts 필드에 유효성 검사를 추가하여 이 필드도 채워졌는지 확인합니다.

    class Shark < ApplicationRecord
      validates :name, presence: true, uniqueness: true
      validates :facts, presence: true
    end
    

    validates:facts,presence:true 코드 라인은 팩트의 고유성과 관련이 없습니다. 고유한 상어 항목과의 연관성을 확인합니다.

    완료되면 파일을 저장하고 닫습니다.

    rails s 또는 rails s --binding=your_server_ip를 사용하여 서버를 다시 시작한 다음 에서 애플리케이션의 루트로 이동합니다. http://localhost:3000 또는 http://your_server_ip:3000.

    New Shark 링크를 누릅니다. 양식에서 이름 필드에 "Great White\를 추가하고 Facts 필드에 "Big Teeth\를 추가한 다음 Create Shark를 누릅니다. 이 경우 경고 메시지가 나타납니다.

    다른 유효성 검사를 확인하려면 Back to sharks를 클릭하여 홈페이지로 돌아간 다음 New Shark를 다시 한 번 누릅니다. 새 양식에서 Name 필드에 "Tiger Shark\를 입력하고 Facts는 비워둡니다. Create Shark를 누르면 다음과 같은 경고가 출력됩니다.

    이러한 변경 사항으로 인해 애플리케이션은 데이터베이스에 저장된 데이터의 일관성을 보장하기 위해 몇 가지 유효성 검사를 수행합니다. 이제 애플리케이션 사용자에게 관심을 돌리고 애플리케이션 데이터를 수정할 수 있는 사람을 정의할 수 있습니다.

    6단계 - 인증 추가

    일부 유효성 검사를 수행하면 데이터베이스에 저장되는 데이터에 대해 어느 정도 보장할 수 있습니다. 그러나 사용자는 어떻습니까? 모든 사용자가 데이터베이스에 추가되는 것을 원하지 않으면 허용된 사용자만 상어를 추가할 수 있도록 몇 가지 인증 조치를 추가해야 합니다. 이렇게 하려면 http_basic_authenticate_with 메서드를 사용하여 사용자 인증을 위한 사용자 이름과 암호 조합을 만들 수 있습니다.

    devise gem 작업을 포함하여 Rails로 사용자를 인증하는 방법에는 여러 가지가 있습니다. 그러나 지금은 애플리케이션 전체의 작업에 적용할 메서드를 애플리케이션 컨트롤러에 추가합니다. 이는 나중에 응용 프로그램에 더 많은 컨트롤러를 추가하는 경우에 유용합니다.

    CTRL+C로 서버를 중지하십시오.

    ApplicationController를 정의하는 파일을 엽니다.

    1. nano app/controllers/application_controller.rb

    내부에는 애플리케이션의 다른 컨트롤러가 상속하는 ApplicationController 클래스에 대한 정의가 있습니다.

    class ApplicationController < ActionController::Base
    end
    

    사용자를 인증하려면 http_basic_authenticate_with 방법과 함께 하드코딩된 사용자 이름과 암호를 사용하십시오. 파일에 다음 코드를 추가합니다.

    class ApplicationController < ActionController::Base
      http_basic_authenticate_with name: 'sammy', password: 'shark', except: [:index, :show]
    end
    

    여기에 사용자 이름과 암호를 제공하는 것 외에도 필요하지 않은 경로( indexshow)를 지정하여 인증을 제한했습니다. 이를 달성하는 또 다른 방법은 only: [:create, :update, :destroy]를 작성하는 것입니다. 이렇게 하면 모든 사용자가 모든 상어에 액세스하고 특정 상어에 대한 사실을 읽을 수 있습니다. 그러나 사이트 콘텐츠를 수정하는 경우 사용자는 액세스 권한이 있음을 증명해야 합니다.

    보다 강력한 설정에서는 이러한 방식으로 값을 하드코딩하는 것을 원하지 않지만 이 예제는 애플리케이션의 경로에 대한 인증을 포함할 수 있는 방법을 보여줍니다. Rails는 기본적으로 세션 데이터를 쿠키에 저장합니다. 지정된 작업에 대해 인증하면 동일한 세션에서 다시 인증할 필요가 없습니다.

    편집이 끝나면 app/controllers/application_controller.rb를 저장하고 닫습니다. 이제 실제 인증을 테스트할 수 있습니다.

    rails s 또는 rails s --binding=your_server_ip로 서버를 시작하고 http:// localhost:3000 또는 http://your_server_ip:3000.

    랜딩 페이지에서 New Shark 버튼을 누릅니다. 이렇게 하면 다음 인증 창이 트리거됩니다.

    사용자 이름 sammy와 암호 shark를 입력하면 app/controllers/application_controller.rb에 추가한 조합입니다. 새로운 상어를 안전하게 생성할 수 있습니다.

    이제 데이터 유효성 검사 및 기본 인증 체계를 갖춘 작동하는 상어 응용 프로그램이 있습니다.

    결론

    이 자습서에서 생성한 Rails 애플리케이션은 추가 개발에 사용할 수 있는 출발점입니다. Rails 생태계를 탐색하는 데 관심이 있다면 프로젝트 문서를 시작하는 것이 좋습니다.

    애플리케이션의 모델 및 경로를 구축하는 방법을 보여주는 Ruby on Rails 애플리케이션용 중첩 리소스 생성 방법을 읽어 프로젝트에 중첩 리소스를 추가하는 방법에 대해 자세히 알아볼 수도 있습니다.

    또한 React Frontend로 Ruby on Rails 프로젝트를 설정하는 방법과 같은 프레임워크를 사용하여 프로젝트에 대해 보다 강력한 프런트엔드를 설정하는 방법을 탐색하고 싶을 수 있습니다. 이 작업을 수행하는 방법에 대한 지침을 제공합니다.

    다른 데이터베이스 옵션을 탐색하려면 PostgreSQL 자습서를 확인하여 이 데이터베이스 작업에 대해 자세히 알아볼 수도 있습니다.