GoogleAppEngine(GAE)에 Rails 앱 배포

7013 단어 GAERails

소개



GoogleAppEngine(GAE)에 Rails 앱을 배포하는 단계를 기록해 둡니다.

주의점



이 절차에서는 DB에 PostgreSQL을 사용한다고 가정하여 Gemfile, database.yml, app.yaml의 예를 설명합니다.

참고



Running Rails 5 on the Google App Engine flexible environment  |  Ruby  |  Google Cloud Platform

사전 준비



Google Cloud SDK



Cloud Tools를 설치하고 초기화할 때까지 완료
참고 : Google Cloud SDK

Gemfile



GAE의 Rails 앱은 production 모드로 시작되므로,
GAE에서 이용하는 gem이 production에서 install되도록 한다.

다음은 development, test에서 SQLite를 이용하여,
production에서 PostgreSQL을 이용하는 경우의 예.

Gemfile
# Use sqlite3 as the database for Active Record
gem 'sqlite3', group: [:development, :test]
gem 'pg', group: :production

database.yml



AppEngine의 Rails 앱은 production 모드로 시작되므로,
database.yml의 production에 GAE의 앱에서 연결
DB 정보를 기술한다.

다음은 환경 변수 DATABASE_URL 에서 DB URL을 얻는 경우의 예입니다.

config/database.yml
production:
  url: <%= ENV['DATABASE_URL'] %>

app.yaml 만들기



앱 디렉토리 아래에 app.yaml를 만듭니다.SECRET_KEY_BASE , DATABASE_URL 등의 환경 변수도 기술한다.

app.yaml
runtime: ruby
env: flex
entrypoint: bundle exec rackup -p $PORT

env_variables:
  SECRET_KEY_BASE: 'xxxxx...'
  DATABASE_URL: 'postgres://<username>:<password>@<host>:<port>/<database>'

프리컴파일


$ bundle exec rails assets:precompile RAILS_ENV=production

마이그레이션


$ bundle exec rake db:migrate RAILS_ENV=production

배포


$ gcloud app deploy

WARNING: Automatic app detection is currently in Beta
Deployment to Google App Engine requires an app.yaml file. This
command will run `gcloud beta app gen-config` to generate an app.yaml
file for you in the current directory (if the current directory does
not contain an App Engine service, please answer "no").

Do you want to continue (Y/n)?

# app.yamlが存在しない状態でデプロイしようとすると表示される
# 「Y」を入力すると、app.yamlが生成される


This looks like a Ruby application. Please confirm the command to run
as the entrypoint: [bundle exec rackup -p $PORT]:

# app.yamlにentrypointが記述されてないと表示される
# 何も入力せずにEnterキーを押下すると、app.yamlに
# 「entrypoint: bundle exec rackup -p $PORT# が追記される


Writing [app.yaml] to [/.../rails/myapp].
You are about to deploy the following services:
 - xxxxx-xxxxx-xxxxx/default/20170826t180159 (from [/.../myapp/app.yaml])
     Deploying to URL: [https://xxxxx-xxxxx-xxxxx.appspot.com]

Do you want to continue (Y/n)?

# デプロイ先の確認を求められる
# 「Y」を入力すると、表示されてるURLにデプロイが開始される

...

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse


Updates are available for some Cloud SDK components.  To install them,
please run:
  $ gcloud components update

액세스 확인



아래 명령을 실행하면 브라우저가 열리고 GAE URL에 액세스합니다.
$ gcloud app browse

보충: Server Error가 표시되는 경우





Production 환경에서 이동할 준비가 부족하면 액세스할 때 Server Error가 표시되기 때문에 준비 누출이 없는지 검토합니다.

SECRET_KEY_BASE 설정



SecretKey 생성
$ bundle exec rake secret
xxxxx...

SECRET_KEY_BASE를 app.yaml에 추가

app.yaml
env_variables:
  SECRET_KEY_BASE: 'xxxxx...'

루트로 라우팅 설정



config/routes.rb
root "sample#index"

프리컴파일


$ bundle exec rails assets:precompile RAILS_ENV=production

마이그레이션


$ bundle exec rake db:migrate RAILS_ENV=production

좋은 웹페이지 즐겨찾기