AWS
ElasticBeanstalk

ElasticBeanstalk with sinatra

環境構築

eb cliのインストール

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3-install.html

pip install awsebcli --upgrade --user
pyenvを入れている場合、--userの指定は不要

dockerfile

FROM ruby
ここでrubyとしか指定していないが、自動的にdebianイメージになる模様

https://42-design.work/technology/docker-multibyte/

ローカルでsinatraアプリのモックを作る

ruby -v
>ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16] #rbenvの環境がある前提

Gemfile作成

vim Gemfile

最低限のインストール

source 'https://rubygems.org'
gem 'sinatra'

bundle installする

bundle install

軽量web serverのthinを入れ、そいつを起動するshotgunを入れる

https://github.com/rtomayko/shotgun

起動

bundle exec shotgun main.rb

== Shotgun/Thin on http://127.0.0.1:9393/
Thin web server (v1.7.2 codename Bachmanity)
Maximum connections set to 1024
Listening on 127.0.0.1:9393, CTRL+C to stop
127.0.0.1 - - [30/Jan/2018:16:39:35 +0900] "GET / HTTP/1.1" 200 3 0.0295

これで、127.0.0.1:9393にアクセスするとなんか出る

ActiveRecord

sinatra用activerecordを入れる

https://github.com/janko-m/sinatra-activerecord

dbに接続する

require 'sinatra/activerecord'

これでconfig/database.ymlがあれば自動的に読み込んでくれる

接続

ActiveRecord::Base.connection.execute('select now()').first

こんなエラー

uninitialized constant ActiveRecord::ConnectionAdapters::RedshiftAdapter::PGconn

PGconnという定数が未定義なのが原因なのだが、理由がわからん

vim /Users/hokaron/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/pg-0.21.0/lib/pg.rb
autoload :PGconn,   'pg/deprecated_constants' # ここで読み込んでいる

deprecated_constantsってのは明らかに怪しい
中身を見ると

The PGconn, PGresult, and PGError constants are deprecated, and will be removed as of version 1.0.

とばっちり書いてある

bundle show
pg (1.0)

お前か・・

Gemfile更新

gem 'pg', '~> 0.20.0'
bundle update pg

これでOK。疲れたよパトラッシュ・・(activerecordって依存関係にうるさすぎ)
ちなみにactiverecord5のredshift-adapterでもだめでした。

SQLのテンプレートはerubisを使用(書き方はerbとほぼ同じ)

Sinatraの実行環境の指定

http://d.hatena.ne.jp/riocampos+tech/20150201/study_sinatra

なぜかrubyコマンドでサーバーも起動。なぜだろう

ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]

何気に入れているsinatra-contribはすごいやつらしい

https://qiita.com/ma2saka/items/8e377fdc5f29bdb0ea66