Cloud9에 Ruby on Rails 환경 구축 ~ 설치부터 시작까지 ~

입문


제목과 같이 Cloud9을 사용하여 Ruby on Rails 환경을 구축하는 단계를 설명합니다.
PHP·Laravel을 독학하여 현재 직업을 찾고 있습니다. 전문적인 엔지니어가 아닙니다.
2021년 1월부터 Professional Rails를 사용하기 위해 내정되었습니다.매일 더욱 정교해지다.
이직을 희망하는 기업은 루비와 레일스의 개발을 위주로 하기 때문에 다시 공부하고 수출도 병행해야 한다.
Cloud9을 선택한 이유는 다음과 같습니다.
  • PC를 윈도우즈로 사용하기 때문에 리눅스 환경은 오류가 발생할 때 로컬에 들어갈 때보다 정보가 많다
  • 그룹의 인프라에서 AWS를 사용하기 때문에 계정을 가지고 있습니다
  • 기본 무료 사용
  • 또한 이 글은 환경 설정의 간단한 구성이 아니라 시간순으로 내가 진행한 절차와 오류를 기록한다.
    "환경을 설정하는 방법을 알고 있습니다!"이런 사람은 전문적인 보도를 참고하세요.

    목표


    AWS의 Cloud9에 Ruby on Rails를 설치하고 "Yay! You're on Rails!"응용 프로그램을 시작합니다.표시

    환경


    Amazon linux
    ruby 2.6.3
    Rails 6.0.3.4
    ySQL5.5.62(나중에 5.7로 업그레이드하는 동안 오류 발생)
    ySQL5.5에서 5.7 버전 업그레이드와libmysqlclient.so.18:cannot open shared object file:No such file or directory 제거

    갑시다


    버전 확인


    먼저 루비 버전을 확인합니다.설치한 거였구나.
    $ ruby -v
    ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
    
    다음 Rails 버전도 확인해 보겠습니다.
    $ rails -v
    Rails 5.0.0
    
    레일스도 안에 있어요.
    하지만 5.0.0 버전의 베타1은 2015년 12월 18일에 발매된 것 같아 상당히 낡아 보인다.
    버전을 업그레이드하고 싶네요.
    $ gem install rails
    $ rails -v
    Rails 6.0.3.4
    
    서로 협조하지 못하고 최신판으로 갱신했다.
    그런 다음 항목을 만드는 디렉토리를 만듭니다.
    이름은 모든 이름일 수 있습니다. 따라서 홈 디렉터리로 이동해서 "rails-training"을 만드십시오.
    그리고 cd 명령으로 rails-training 디렉터리에 들어갑니다.
    $ cd
    $ mkdir rails-training
    $ cd rails-training
    
    나는 MySQL의 버전 확인이 생각났다.
    $ mysql -v
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket'/var/lib/mysql/mysql.sock' (2)
    
    오류가 발생했습니다.
    socket 파일이 없어서 MySQL에 연결할 수 없는 것 같습니다.
    ySQL을 다시 시작하면 socket 파일이 자동으로 생성되므로 한 번 중지하고 다시 시작합니다.
    (restart도 괜찮지만 자꾸 징그러우니 멈추고 시작해야 한다)
    $ /etc/init.d/mysqld stop
    $ /etc/init.d/mysqld start
    touch: cannot touch ‘/var/log/mysqld.log’: Permission denied
    chown: changing ownership of ‘/var/log/mysqld.log’: Operation not permitted
    ~略~
    chown: changing ownership of ‘/var/lib/mysql’: Operation not permitted
    
    권한 오류야, 내가 시작할 권한이 없는 것 같아.
    $ sudo /etc/init.d/mysqld start
    
    따라서sudu 명령으로 강제 실행합니다.성공적으로 재부팅되었습니다.
    다음 명령으로 최소한의 안전 설정을 계속합니다ySQL의 초기 설정 메모
    그런 다음 MySQL을 다시 시작하는 것을 잊지 마십시오.
    $ mysql_secure_installation
    ~略(対話形式でパスワード等を設定)~
    $ sudo /etc/init.d/mysqld restart
    

    항목 만들기


    여기까지 와서 레일스 프로젝트를 만들었어요.
    현재 디렉터리가 방금 만든 궤도인지 확인하십시오.
    Rails의 기본 데이터베이스가 SQLite로 설정되어 있으므로 "-d mysql"을 지정할 수 있습니다.
    $ rails new training_app -d mysql
    ~略~
    An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
    Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
    ~略~
    
    이런 오류가 발생했습니다.
    "rails new"명령을 실행하면 "RubyGems"에서 프로그램을 생성할 때 필요한 패키지를 자동으로 설치합니다.
    방금 "-d mysql"옵션을 지정했기 때문에 내부에서 "gem install mysql2"명령을 실행했습니다.
    그러나'mysql2'라는 gm 패키지를 설치하려면 CentOS에'mysql-devel'이라는 rpm 패키지가 설치되어 있어'mysql2'설치에 실패한 것 같습니다.
    즉, 이 문제를 해결해야 한다는 것이다
    yum에 mysql-devel 설치
    gem에 mysql2 설치
    의 명세란 스타일에 정의된 설정입니다.
    [Ruby on Rails 환경 구축] 설치부터 시작까지의 단계[MySQL]
    그래서 저는 yum로 "mysql-devel"을 설치했습니다.
    또 인용 사이트에도 아까 "rails new"명령이 살아있기 때문에 프로젝트 자체가 만들어졌다는 기록이 있다.
    따라서 새 "rails new"명령을 실행할 필요가 없습니다.
    $ sudo yum install -y mysql-devel
    $ ls
    app  bin  config  config.ru  db  Gemfile  lib  log  package.json  public  Rakefile  README.md storage  test  tmp  vendor
    

    서버 시작


    프로젝트 디렉토리로 이동한 후 실행합니다.
    $ cd training_app
    $ rails s
    => Booting Puma
    => Rails 6.0.3.4 application starting in development 
    => Run `rails server --help` for more startup options
    Exiting
    Traceback (most recent call last):
    ~略~
    /home/ec2-user/.rvm/gems/ruby-2.6.3/gems/webpacker-4.3.0/lib/webpacker/configuration.rb:95:in `rescue in load': Webpacker configuration file not found /home/ec2-user/rails-training/training_app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /home/ec2-user/rails-training/training_app/config/webpacker.yml (RuntimeError)
    
    rails webpacker: 설치 오류를 실행하십시오. 이런 파일이나 디렉터리가 없습니다.
    우선 말한 대로 "rails 웹 페이지: install"을 실행합니다.
    $ rails webpacker:install
    Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/
    
    yarn을 설치하지 않은 것 같아서 설치하고 실행하면 서버도 시작됩니다.
    $ brew install yarn
    $ rails webpacker:install
    $ rails s
    
    페이지에 액세스하는 동안 다음과 같은 오류가 발생하여 정상적으로 표시할 수 없습니다.
    To allow requests to **********.vfs.cloud9.ap-northeast-1.amazonaws.com, add the following to your environment configuration:
    Rails6부터DNS 재귀속 공격 대책으로 자신만 접근할 수 있는 규격인 것 같다.
    config/application.rb에 접근할 수 있는 프로그램 클래스의 설정을 설명함으로써 해결합니다.
    <config/application.rb>
    
    require_relative 'boot'
    
    require 'rails/all'
    
    # Require the gems listed in Gemfile, including any gems
    # you've limited to :test, :development, or :production.
    Bundler.require(*Rails.groups)
    
    module TrainingApp
      class Application < Rails::Application
        # Initialize configuration defaults for originally generated Rails version.
        config.load_defaults 6.0
    
        #以下一文を追加。末尾が"amazonaws.com"のドメインは許可する。
        config.hosts << ".amazonaws.com" 
    
        # Settings in config/environments/* take precedence over those specified here.
        # Application configuration can go into files in config/initializers
        # -- all .rb files in that directory are automatically loaded after loading
        # the framework and any gems in your application.
      end
    end
    
    서버가 시작되었습니다. 나타날 것입니다.
    $ rails s
    
    Mysql2::Error::ConnectionError
    Access denied for user 'root'@'localhost' (using password: NO)
    이번에는 MySQL의 루트 사용자 암호가 일치하지 않아 데이터베이스에 접근할 수 없을 때입니다.
    라벨에서도 경험한 잘못이니 침착하게 대처해야 한다.
    Rayls에서 traning_app/config/detabase.yml에 데이터베이스 주위의 설정을 기재하면 됩니다.
    내 환경에서 17줄에 방금 대화 형식으로 설정한 MySQL의 비밀번호를 적으세요.
    <traning_app/config/detabase.yml>
    
    ~略~
    default: &default
      adapter: mysql2
      encoding: utf8mb4
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: root
      password: ここにパスワードを記載
      socket: /var/lib/mysql/mysql.sock
    
    development:
      <<: *default
      database: training_app_development
    ~略~
    
    이러면 어때, 나를 용서할 뻔했어.
    $ rails s
    
    ActiveRecord::NoDatabaseError
    Unknown database 'training_app_development'
    또 나왔네.
    "training_app_development"같은 데이터베이스는 몰라요.
    어?데이터베이스 안 만들었는데.
    그래서 데이터베이스를 만들었어요.
    $ mysql -u root -p
    Enter password: 
    
    > CREATE DATABASE test_table;
    > show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test_table         |
    +--------------------+
    
    됐어, 됐어, 데이터베이스 다 됐어.
    Rails는 db 명령으로 데이터베이스를 만드는 것이 가장 좋다는 것을 알게 되었습니다.
    $ rake db:create
    를 사용하여 만든 "test_table"으로 설정합니다.
    이전에 비밀번호를 설정한'traning_app/config/detabase.yml'파일에서 오류와 같은 데이터베이스 이름이 발견되었습니다.
    대충 여기에 쓰면 반영할 수 있다.
    <traning_app/config/detabase.yml>
    
    ~略~
    default: &default
      adapter: mysql2
      encoding: utf8mb4
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: root
      password: ここにパスワードを記載
      socket: /var/lib/mysql/mysql.sock
    
    development:
      <<: *default
      database: ここにデータベース名を記載
    ~略~
    
    이렇게 하면 완벽할 거야.
    $ rails s
    
    **********.vfs.cloud9.ap-northeast-1.amazonaws.com 접속 거부.
    찾아보니 그림의 부분을 누르고 다른 탭으로 열면 표시되는 정보를 발견했습니다.


    됐어.
    Yay! You’re on Rails!보이기 때문에 먼저 한 가지 일을 해결했습니다.
    ySQL의 버전 업그레이드는 다음 기사를 참조하십시오.
    ySQL5.5에서 5.7 버전 업그레이드와libmysqlclient.so.18:cannot open shared object file:No such file or directory 제거

    좋은 웹페이지 즐겨찾기