この記事の内容
Railsで初めてアプリを作っている人が本番環境と開発環境をどうやって(極力)コードをいじらずにやっていったらいいか学んだ(予定)ものを書きます。
取り急ぎで記事を書いたので、何か追加があった際は追記していきます。
データベースについて
データベースは config/database.yml にdevelopmentとproductionの設定を書きます。下記はサンプルです。
ローカル(とテスト)では sqlite3 を使用し、本番環境でMySQLを使用する設定です。
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
# local PC
development:
<<: *default
database: db/development.sqlite3
# Test 用
test:
<<: *default
database: db/test.sqlite3
# production server用
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: データベースの名前
pool: 5
username: ユーザ名
password: パスワード
host: localhost
rails console
rails consoleは引数で環境の指定ができるようです。
$ rails console -e production
データベースのmigrate
データベースのマイグレーションは以下のように行いました。
開発環境
$ rake db:migrate RAILS_ENV=development
RAILS_ENVを特に設定していない場合はデフォルトがdevelopmentになるようです。
本番環境
$ rake db:migrate RAILS_ENV=production
その他のオプションや実行例は http://railsdoc.com/references/rake%20db:migrate にまとまっています。
初期データをseeds.rbを使って登録
初期データはテストデータであればtest/の中にあるファイルで初期データが作れますが、都合によって開発環境と本番環境でデータが変わらなければいけない場合は一工夫が要りそうでした。
色々やり方があるようです。
- rakeのtaskを修正してファイルを読み込むデータファイルを変えるパターン
- seeds.rbの中で分岐させて登録するパターン
数がある場合は工夫が必要ですね。
configファイル
config/ の下にdevelopment.rb, production.rb, test.rbというファイルがあるので、それぞれの設定に応じて編集を行う。
gemについて
意外と困ったのは、開発用のPCに入れられないライブラリがあったことで、bundle install が実行できず仕方なくコメントアウトを行っていました。
これも環境をよりどころに読み込むものを変えられるようです。
開発環境だけで使うgemファイルの表示
group :development do
# インストールしたいGemを記載
gem 'better_errors'
end
groupのブロックを作成し、その中にインストールするgemを記載します。
bundle install
--withoutのオプションを使用する。
$ bundle install --without test development
test/developmentグループに指定しているgemを取り除いてbundle install => productionの時に
パスワード等の比較的繊細な情報について
個々のサーバに環境変数として持たせておくという手があるようです。
あとは例えば定数で設定してあるようなところに環境変数を入れてやるという具合です。
参考記事: http://qiita.com/ka_/items/a19f65628bdc213fc8f5
サーバの起動
passenger standalone
passenger standaloneで環境をつくっていたのでそちらのものを記載します。
コマンドラインで(デフォルトはdevelopment)
$ passenger start --environment production
$ passenger start --environment development
設定ファイルで、nginx式のjson設定ファイルに
"environment": "production",
を追加する
apache + passenger
confファイルに下記の様な形にする必要があるようです。
こちら( http://www.workabroad.jp/tech/1116 )の記事を拝見しました
RailsEnv production
rails s
ついでにrails sです。基本形はRAILS_ENV=productionっぽいんですね
rails s RAILS_ENV=production
その他
画面上に現在の環境を示したラベルを表示するgem
面白そうです
https://github.com/dtaniwaki/rack-dev-mark
まとめ
環境変数を使って、コードに無駄な修正をいれないでおくことでgit statusとかをした時の煩雑さが違いますし、なによりファイルがおかしくなって発狂することも無くなりそうなのでもっと意識してやっていきたいです。本当はなるべくそういう差異みたいなものを生まないようにして書かなければいけないのだとは思いつつ一歩一歩。
Railsをはじめて開発するとローカルルールを知るのに結構なエネルギーが必要なので、これからも備忘録的にまとめておきたいです。