LoginSignup
168

More than 5 years have passed since last update.

Railsのdevelopment/productionについて

Last updated at Posted at 2015-06-10

この記事の内容

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/の中にあるファイルで初期データが作れますが、都合によって開発環境と本番環境でデータが変わらなければいけない場合は一工夫が要りそうでした。
色々やり方があるようです。

数がある場合は工夫が必要ですね。

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をはじめて開発するとローカルルールを知るのに結構なエネルギーが必要なので、これからも備忘録的にまとめておきたいです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
168