2015/07/10

録画システムをrails4で開発

録画ツールや開発環境が整いましたので、いよいよ録画システムのフロントエンドとなる
サーバーアプリケーションをRails4を使って構築していきます。

mysql

用途から言ってsqlliteで十分だと思うけれど、データベースは使い慣れているmysqlにする。

$ sudo apt-get install mysql-server
$ sudo apt-get install libmysqlclient-dev ← gem mysqlで使うから

後これくらいはやっておこう。
$ mysql_secure_installation

ユーザ作成
mysqlにrecmanユーザを作成して、recmanデータベースのアクセス権を与える。

$ mysql -uroot -p
> create user 'recman'@'localhost' identified by 'pw';
> grant all privileges on recman.* to 'recman'@'localhost';


railsアプリ(recman)の作成
$ rails new recman -d mysql

gitリポジトリ
$ cd recman
$ git init
$ git add .
$ git commit -m "the first recman"

gem
recman/conf/database.ymlのproductionセクションが以下のようになっていたので
production:
  <<: br="" default="">  database: recman_production
  username: recman
  password: <%= ENV['RECMAN_DATABASE_PASSWORD'] %>
 ↑直接パスワードに書き換える。環境変数で管理するほどじゃないし。
その他データベース名とかは自分のすきに書き換える。

Gemfileに追記
gem 'therubyracer'
gem 'mysql'
gem 'unicorn' ←productionをunicornで駆動するから


今回デプロイしないで直接駆動の予定なので、capistranoは使わないな。

$ bundle install

これでrailsアプリの母体が出来ました。

model作成

Channelモデル
$ rails g model channel code:integer name:string

Categoryモデル
$ rails g model category name:string

Programモデル
$ rails g scaffold program \
    channel_id:integer \
    title:string \
    detail:text \
    start_time:datetime \
    end_time:datetime \
    duration:integer \
    category_id:integer \
    event_id:integer

 scaffoldで作ると、VMC全部作ってくれます。楽ちん。
event_idはどう使うかイメージできていないけど、放送終了まではユニークなコードらしいので録画スケジュールとかで使えるかと。

後で、ChannelとProgramのchannel_idが関係付けられる感じ。Categoryも同じ。


 index作成
モデル作成時に出来たmigrationファイルに書き加えてもいいけど、区別した方が自分は好きなので。

$ rails g migration AddIndexToPrograms

db/migration/[TIME]_add_index_to_programs.rbにadd_indexを書いていく
 def change
    add_index :programs, :channel_id
    add_index :programs, :title
    add_index :programs, :category_id
    add_index :programs, :start_at
    add_index :programs, :end_at
    add_index :programs, :event_id
    add_index :programs, [:start_at,:end_at]
    add_index :programs, [:start_at,:duration]
    add_index :programs, [:category_id,:start_at]
 end
な感じ? ありそうなクエリをひと通りインデクス作っておこう。マスターレコードのChannelやCategoryも一応ね。

データベース作成
$ bundle exec rake db:create
$ bundle exec rake db:migrate


viewを確認(データ入ってないけど)
$ rails s -b 0.0.0.0

ブラウザで http://shuttle:3000/programs へ

Listing Programs

Channel_id Title Detail Start_at End_at Duration Category_id

New Program
とりあえず出ましたね。

おお。パスをわざと間違えてみたら、RoutingErrorページが格好いいじゃないですか。
多分これDevelopmentで動かしている時に出るんでしょうね。Rails3はこんなじゃなかったなぁ。
ちょっと感動。

データベースの中身が入ってこないとつまらないんで、次はそっちから片付けます。

0 件のコメント:

コメントを投稿