質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.39%

  • Ruby on Rails

    9305questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • CentOS

    3257questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Vagrant

    1436questions

    Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

ホストとゲストでのDBの取扱方法について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 514

PartyKids

score 57

閲覧ありがとうございます。
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の取扱は、仮想の中で完結するので、いいのかな?っと思ったり。。。。

ちんぷんかんぷんな事を言っているかもしれませんが、よろしくお願いいたします!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

ホストで作業するのが間違いです。
ゲストで全て作業してください。
作業面だけで言えば、ホストに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/ でアクセスできる。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/30 15:04 編集

    mingosさん、ありがとうございました! 出来ました!

    途中、問題点を自分が理解できる所まで落とし込めず、詰まったので、仮想2台でやりました。開発仮想で作ったものを、一度ローカルにgit cloneして、それをcapistranoを使って、ステージング仮想にデプロイしてみました。

    質問があるのですが、よろしいでしょうか?

    1. 一旦、ローカルで作業(gemのインストールとcapistranoのインストール&設定)してしまったのですが、なにか問題が起こり得るのでしょうか?やはり、仮想の中ですべて完結出来ることが理想ですか?

    2. 作った仮想は削除しないのですか?
    デプロイ後の運用を考えれば、問題が起こる度に仮想を新規作成するのは面倒。また、以前設定したものが人為的ミスで新規仮想に反映されず、本番環境にミスマッチな開発がされるリスクが起こる?


    よろしくお願いいたします!

    キャンセル

  • 2017/07/31 10:32

    1. について

    capistranoは作業の自動化のためのツールであって、railsとは無関係です。
    一緒に語られる事が多いので混乱しがちですが、PHPアプリのデプロイでもcapistranoは使えますよね。
    capistranoを動かす場所がホストである必要があるなら、ホストにcapistranoを動作させるための環境を作るのは当然です。

    私が言っているのは、railsやDBを実行するサーバは、本番環境と同じOSの仮想マシンにするべきであるという事です。


    2.について

    なぜ削除する必要があるのでしょうか?
    意味が分かりません。
    開発用、ステージングの仮想マシンはそのまま使い続けます。

    キャンセル

  • 2017/08/01 01:57

    返信ありがとうございます!

    >railsやDBを実行するサーバは、本番環境と同じOSの仮想マシンにするべき
    そういうことなんですね!capistranoがデプロイツールなのは分かっていたのですが、仮想の中ですべて完結出来る状態がベストなのかが分からなく質問させていただきました。
    まだ、開発では動いてたのに、本番では動かない。。という状況に出会ってないので、何を仮想に入れたら良いのかが分かっていないのが問題ですね。

    >開発用、ステージングの仮想マシンはそのまま使い続けます
    やはりそうでしたか。。初めての仮想&環境作りだったので、失敗作仮想がすでに6個ぐらい出来てしまいました。何が必要かが分かっていくうちに、仮想で環境を作るのは簡単だなっという反面、簡単に構築出来るなら容量も結構あるので削除してもいいのかな?っと思いました!

    本当にありがとうございます!
    mingosさんのおかげで、ここまでたどり着けました。

    一通り、流れはつかめた?と思いますので、htmlとcssを勉強しながら、実際にアプリケーションを制作していきたいと思います。

    ありがとうございました!

    キャンセル

0

developでは、DBのみ。ステージングでは、web&アプリーケーションサーバーの設置。

開発環境とステージング環境の認識がおかしい気がします。

開発環境はそのまま製造中のシステムを開発者が確認するための環境で、
ステージング環境は本番リリース前の確認、お客さんに検収をしてもらうための環境と認識しております。

IT用語辞典

ステージング環境とは?開発環境、検証環境との違いと役割

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/25 18:47

    返信ありがとうございます!

    >お客さんに検収をしてもらうための環境
    わざわざリンク先を貼り付けて頂きありがとうございます!

    いきなり本番サーバーにアップするのは危険?かと思いましたので、それに似た環境を別途仮想で作って検証する環境の事をステージング環境と表現しました。
    私個人が趣味レベルでする場合、顧客はいないので。。。。

    そもそも、ゲストですべて作業するならば、開発と本番との差異なんて発生しないのでしょうか?
    てっきり、ホストで作業するから、ホストとゲストのos差等から本番環境に移行したら上手くいかない。。。が起こるのかと思っておりました。。。

    キャンセル

  • 2017/07/25 19:02 編集

    >いきなり本番サーバーにアップするのは危険?かと思いましたので、それに似た環境を別途仮想で作って検証する環境の事をステージング環境と表現しました。
    >私個人が趣味レベルでする場合、顧客はいないので。。。。

    そういう感じで大丈夫です。

    >そもそも、ゲストですべて作業するならば、開発と本番との差異なんて発生しないのでしょうか?
    開発環境構築でしたことをメモらないで構築すると本番構築時にうっかり漏れが出て開発・本番間で差異が出ることはあります。
    本番で動かないみたいなことが起こる原因のあるあるです。

    開発環境・ステージング環境は本番環境のミニチュアみたいなものと思っていただければと思います。

    キャンセル

  • 2017/07/25 19:18

    返信ありがとうございます!

    勉強不足で、至らない質問をして申し訳ございませんでした!

    今後とも、よろしくお願いいたします!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.39%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Ruby on Rails

    9305questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • CentOS

    3257questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Vagrant

    1436questions

    Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。