カテゴリー:
Rails
タグ:
 Rails4 本番 デプロイ

このエントリーをはてなブックマークに追加
更新日時:
2014年07月17日(木)
作成日時:
2014年07月17日(木)

前の記事 / 次の記事

なんか色々変わったね。
Rails3の時の知識があんまり役に立たないのが萌える。

全力で未来に突き進んでる感じがいいよね。

まず、プリコンパイルどうすんだっけ?って辺りから始める。

1.precompile

bundle exec rake assets:precompile RAILS_ENV=production

2.DBもつくっとこう

bundle exec rake db:migrate:reset RAILS_ENV=production
bundle exec rake db:seed RAILS_ENV=production

2.本番環境でサーバーを立ち上げてみる

あまりにも忘却し過ぎてちょっと焦ったよね。
RAILS_ENV=productionとかやっても起動しないから。しかなったから。

bundle exec rails s -e production

3.アセットが読めないんだけど??

ここでちょっと問題が。
アセットが読めない、っていうかStyleSheetもJavaScriptも読めない。

なんで!

アクセスできないとかじゃなくて、ない。
その場所にないことになってる、404になる。

参考:Rails3 css、js 404 Not Found! 静的ファイルが読み込まれない!

Webricでちょっと動かしてみようって思ってしまったのが罠だったね。
静的ファイルはApatchかNginxに受け持たせてRailsは関知しないからっていうのが
デフォルト設定なんだけど、Webricだとアセットの面倒を見てくれないみたい。

なので、一時的にRailsに面倒見させる設定にしてサーバー再起動。

vi config/environments/production.rb
# これを false から true にする
config.serve_static_assets = true

とかやってると本番環境でテストするみたいな意味不明なことを
始めそうなので動くのが確認できたらすぐ戻そう・・・。

4.bootstrapバグってるんだけど?

これは知ってた。
つかこれはRailsを使い続ける限り毎回直し続けないといけないんだろうか。

アイコンとか相対パスで指定してあるところがアセットコンパイル通過後は
見えなくなるので、まあなんか頑張って直す。

参考:2014-04-05 rails4 bootstrap3 で Glyphicons が 表示されない際の対応

考えるべき点は次の3つ。

1つ目はデフォルト状態だとプリコンパイルされず、アセットにならないので、
これをプリコンパイルされてアセットになるように訂正すること。

2つ目はプリコンパイルされると相対パスではアセットが見えなくなるので
"/assets/" からのパスで見えるようにパスを訂正すること。

3つ目はRails4ではアセットにダイジェストが付くようになったので
参照する際にダイジェストが付与sれるように訂正すること。

まず、プリコンパイルの対象にする。

vi config/application.rb
config.assets.precompile += %w(*.eot *.svg *.ttf *.woff)

こうすることで、"/assets/bootstrap/" にプリコンパイルされたアセットが落ちるようになる。
ので、相対パスで指定されている部分("../fonts/")を "/assets/bootstrap/" に書き換える。

bootstrap-sass を使っているなら

vi bootstrap_ext.css.sass

// bootstrapを読み込む前にパスの変数をセット
$icon-font-path: "/assets/bootstrap/"

// 読み込んで
@inport "bootstrap"

// ダイジェストを付与してオーバーライド
@font-face
  font-family: 'Glyphicons Halflings'
  src: url("/assets/bootstrap/glyphicons-halflings-regular-dabd247fcf6131fac2d5fb49ef946032.eot")
  // 他は割愛、とにかくダイジェストを付ける。

Railsを本番に乗せようとする度に思うけど、precompile周りが鬼門だよね。
っていうかRails本体は直感的で分かりやすいのに、このprecompile周りの
意味不明さが本当意味不明。

本番環境での利用に耐えるために頑張ってこうなったんだろうけど、
個人的には速度が犠牲になってももう少し分かりやすくても良かったんじゃ
なかろうかと思う。

あとprecompile凄く早くなったよね。
Rails3 & Ruby1.9 の時とか軽く飯食食ってこられるくらいの時間かかったもんね。
使ってるマシンがしょぼいっていうものあったんだろうけど。