Herokuに速攻デプロイするSinatraアプリテンプレートをつくる #2 PostgreSQL編
Special Thanks
以下の記事を参考にさせていただきました.
- Sinatra-ActiverecordをHerokuにPushする
http://qiita.com/myokkie/items/6f65db5d53f19d34a27c
- SinatraからActiveRecord 3を使う(1) マイグレーション
http://blog.ruedap.com/2011/04/16/ruby-sinatra-active-record-3-migrate
- Sinatra✕ActiveRecord✕PostgreSQLでデータベース操作。
http://blog.notsobad.jp/post/60070706766/sinatra-activerecord-postgresql
- Deploying Rack-based Apps (heroku公式)
https://devcenter.heroku.com/articles/rack#using-activerecord
はじめに
前回作ったSinatraのアプリケーションテンプレートをheroku用でデプロイする使い捨てアプリにするためにmodelを追加してPostgreSQL仕様にしてみます.
これで簡単にアプリをババっとつくってババっとデプロイできてしまう,というところを目指したい.
リポジトリは以下に置いてます.
totzYuta/lightest-sinatra-app-for-heroku · GitHub
手順
以下のコマンドでheroku用のpostgresqlツールをインストール.
$ heroku addons:create heroku-postgresql
これでデータベースが作成されます.
$ heroku config
でpostgresが設定されているようであればおk
DB接続設定
ということでActiveRecordでのDBへの接続設定を行います.
まずはpgのgemを追加します.
# Gemfile gem 'pg'
と,ここで$ bundle insall
しようとするとエラー.
pg_config
がないと言われてしまった.
以下の記事によるとbrewでpstgresをインストールするとpg_configが作成されるらしいので,インストール.
http://qiita.com/youcune/items/5b783f7fde45d0fd4b35
$ brew install postgresql
再びgemのインストールにトライ
$ sudo gem install pg -v '0.18.2' bundle install --path=vendor/bundle
これでうまくいきました.
migrateファイルの作成
以下の記事を参考にしていただき...
http://qiita.com/myokkie/items/b6b68b247ec7a110a1c4
ActiveRecordのgemも追加しましょー
# Gemfile gem 'activerecord' gem 'sinatra-activerecord'
もいちどbundle installして...
$ bundle install --path=vendor/bundle
そしたらここからmigrationファイルを作るためのrakeコマンドを使えるようにしていきます.
Rakefile
を作成して以下を記述.
require 'sinatra/activerecord' require 'sinatra/activerecord/rake'
以下のコマンドを実行すると,使えるrakeタスクを確認できます.
$ bundle exec rake -T rake db:create # Creates the database from DATABASE_URL or config/databa... rake db:create_migration # Create a migration (parameters: NAME, VERSION) rake db:drop # Drops the database from DATABASE_URL or config/database... rake db:fixtures:load # Load fixtures into the current environment's database rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false... rake db:migrate:status # Display status of migrations rake db:rollback # Rolls the schema back to the previous version (specify ... rake db:schema:cache:clear # Clear a db/schema_cache.dump file rake db:schema:cache:dump # Create a db/schema_cache.dump file rake db:schema:dump # Create a db/schema.rb file that is portable against any... rake db:schema:load # Load a schema.rb file into the database rake db:seed # Load the seed data from db/seeds.rb rake db:setup # Create the database, load the schema, and initialize wi... rake db:structure:dump # Dump the database structure to db/structure.sql rake db:structure:load # Recreate the databases from the structure.sql file rake db:version # Retrieves the current schema version number
したらrakeコマンドのdb:create_migrationタスクでマイグレーションファイルを作成します.
$ bundle exec rake db:create_migration NAME=create_users
すると以下のような感じでmigrationファイルが作成されてると思います.
$ cat db/migrate/20150610114355_create_users.rb class CreateUsers < ActiveRecord::Migration def change end end
ふむふむ.Railsやこれは.
そしたらさきほどのmigrationファイルを編集してテーブルの構造を定義する.
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :email t.string :order t.timestamps end end end
app.rb
の冒頭に以下を追加する.
# app.rb ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || 'sqlite3://localhost/app.db') class Count < ActiveRecord::Base; end
Rakefile
に以下を追加
ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || 'sqlite3://localhost/myapp.db')
生成する
$ git push heroku master $ heroku run rake db:migrate
$ heroku open
で確認してみたけどApplication Errorになっていた.
$ heroku logs
で確認する.
どうやら
▶ bundle exec ruby app.rb app.rb:8:in `<main>': uninitialized constant ActiveRecord (NameError)
ここでエラーが起こってる模様.
問題はapp.rbでactiverecordをrequireしてないだけでした.ということでapp.rbに以下を追加.
require 'activerecord'
これでいけた!
以下でDBにアクセスしてきちんとtableが作成されてるかどうか確認する.
▶ heroku pg:psql DATABASE_URL
=> \d Schema | Name | Type | Owner --------+-------------------+----------+---------------- public | schema_migrations | table | mdktkrgwidnepi public | users | table | mdktkrgwidnepi public | users_id_seq | sequence | mdktkrgwidnepi => \q
参考:pgの基本操作 http://www.marronkun.net/linux/other/database_000014.html
ということでめちゃくちゃ時間かかりましたがなんとかいけましたーー
次は簡単にデータを登録する処理を追加してみようと思います!