質問: 閲覧ありがとうございます。 vagrantで開発環境&ステージング環境に挑戦中の初心者です。よろしくお願いいたします! rails tutorialを参考に開発環境で開発する流れを勉強中なのですが、DBの取扱に困っているので助けてください。 前提 -- vagrant 1.9.7 ホスト MacOsX sierra ruby 2.4.1 rails 5.0.2 mysql Ver 14.14 Distrib 5.7.18 ゲスト centos7(official box) ruby 2.4.1 rails 5.0.2 mysql Ver 14.14 Distrib 5.7.18 現在、ホスト側で作業、ゲスト側でサーバー起動してブラウザ確認、ッといった開発環境です。 ホストのDBに、一つだけレコードを挿入`User.create(name: "thank you for your help")`した後、ゲストのMySQLを見ると先程挿入したデータが入っていませんでした。ホストとゲストのMySQLは別々なので、データが入るはずがないよね!っと納得したが、ホストに挿入したデータを毎回ゲストにしなければいけないのか?っと疑問に思い質問させていただきました。 疑問:そもそもホストで作業する事が間違い?それとも開発環境の構造がおかしい? -------------------------------------- DBのレコード挿入を毎回ホスト・ゲストに処理をするっといった、めんどくさい事をしないのでは?ッと思い検索してみたのですが、答えが見つからなかったので、自分の開発の進め方がおかしいのではと思い質問させていただきました。 現在の私の考えは、ホストを中心に、仮想で各々の環境を構築すれば良いと思っています。developでは、DBのみ。ステージングでは、web&アプリーケーションサーバーの設置。 ですが、ゲストを起点に開発するやり方も考えられるとおもうのですが? つまり、ゲストの開発環境で作業し、ホストはあくまでもバックアップとしての立場。 ゲストで作業する場合だと、DBの取扱は、仮想の中で完結するので、いいのかな?っと思ったり。。。。 ちんぷんかんぷんな事を言っているかもしれませんが、よろしくお願いいたします!
回答: ホストで作業するのが間違いです。 ゲストで全て作業してください。 作業面だけで言えば、ホストにMySQLやruby/railsをインストールする必要はありません。 各環境について 前回の質問では、分かりやすく説明するために、開発環境とステージング環境は分けるという話をしました。 ただ、練習という意味では開発用の仮想マシン1台で出来る方法があるので、こちらをおすすめします。 私もrailsチュートリアルを試す時は、この方法でやっています。 ### 開発環境 * 実行ユーザ:partykids(vagrantでも良い) * RAILS_ROOT:/home/partykids/workspace/sample_app * RAILS_ENV:development * ポート番号:3000 * DB名:開発用DB (sample_app_development) * Appサーバ:puma(rails sで実行) * Webサーバ:なし * ソース:Bitbucketで管理 ### ステージング環境のようなもの * 実行ユーザ:sample_app(プロジェクト専用のユーザ。本番環境と同じにする) * RAILS_ROOT:/home/sample_app/approot (ユーザ名をsample_appとしたので、ディレクトリ名を変えないとややこしいため、approotとした) * RAILS_ENV:production * ポート番号:3000以外(8210とか9150とか使用されていない番号ならOK。中途半端な番号のほうが被りにくい) * DB名:本番用DB (sample_app_production) * Webサーバ:ApacheまたはNginx でバーチャルホストの設定をする * ソース:Bitbucketで管理 ドキュメントルートは当然、/home/sample_app/approot/publicにする Linuxユーザを作成した直後は、/home/sample_appのパーミッションが0700なので、 0711に変える必要がある点に注意。 #### ステージング環境をブラウザで見るための設定 Vagrantfileを修正し、192.168.33.10などでホストからゲストの仮想マシンへアクセスできるように設定する。 ホストの/etc/hostsを編集して、192.168.33.10 sample.example.com など適当なホスト名を設定。 こうすると、ホスト側で http://sample.example.com/ でアクセスできる。