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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

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

Ruby on Rails

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

Vagrant

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

Q&A

解決済

2回答

248閲覧

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

PartyKids

総合スコア65

CentOS

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

Ruby on Rails

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

Vagrant

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

0グッド

1クリップ

投稿2017/07/25 08:34

編集2017/07/25 08:36

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

編集2017/07/25 09:50
mingos

総合スコア4025

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PartyKids

2017/07/25 10:06

いつも助けて頂きありがとうございます! やっぱりそうでしたか!まずはプリコンパイルをしたかったので、作業を進めてましたが。。。早めに知れて良かったです。ありがとうございます! そうすると、エディタとかは、どのように使えばいいのですか?ターミナル入力は、vagrantに入ってする。それ以外のファイル編集はホストで編集して、マウント機能を介して、ゲストに反映させる。ですか? また、pumaやnginx等は開発環境に含めなくてもよろしいのでしょうか? いつも初歩的なことばかり質問して、申し訳ございません。 よろしくお願いいたします!
PartyKids

2017/07/25 10:11

返信に時間がかかってしまい、編集前を見ていました! 一度読んでから、また返信いたします! よろしくお願いいたします!
mingos

2017/07/25 10:27

ソースはファイル共有機能(vagrant or samba)を使って、ホスト側のエディタで編集します。
PartyKids

2017/07/25 12:48

返信遅くなって申し訳ございません。 いつも助けて頂き、本当に有難うございます! とても具体的に説明していただいたので、自分の考えがかなり間違っていた事に気が付けました! 本を読んでもよく分からなかったので、今回は実践からスタートしたのですが、甘かったです。。。 いくつか分からない点がございますが、mingosさんに一から十まで教えていただくわけにはいかないので(たくさん甘えてすみません)一度作ってみます! 今からモデルを含む、プリコンパイルが出来る所まで作業してみたいと思います! 今回も、本当にありがとうございました! 心より感謝申し上げます。
PartyKids

2017/07/30 06:09 編集

mingosさん、ありがとうございました! 出来ました! 途中、問題点を自分が理解できる所まで落とし込めず、詰まったので、仮想2台でやりました。開発仮想で作ったものを、一度ローカルにgit cloneして、それをcapistranoを使って、ステージング仮想にデプロイしてみました。 質問があるのですが、よろしいでしょうか? 1. 一旦、ローカルで作業(gemのインストールとcapistranoのインストール&設定)してしまったのですが、なにか問題が起こり得るのでしょうか?やはり、仮想の中ですべて完結出来ることが理想ですか? 2. 作った仮想は削除しないのですか? デプロイ後の運用を考えれば、問題が起こる度に仮想を新規作成するのは面倒。また、以前設定したものが人為的ミスで新規仮想に反映されず、本番環境にミスマッチな開発がされるリスクが起こる? よろしくお願いいたします!
mingos

2017/07/31 01:32

1. について capistranoは作業の自動化のためのツールであって、railsとは無関係です。 一緒に語られる事が多いので混乱しがちですが、PHPアプリのデプロイでもcapistranoは使えますよね。 capistranoを動かす場所がホストである必要があるなら、ホストにcapistranoを動作させるための環境を作るのは当然です。 私が言っているのは、railsやDBを実行するサーバは、本番環境と同じOSの仮想マシンにするべきであるという事です。 2.について なぜ削除する必要があるのでしょうか? 意味が分かりません。 開発用、ステージングの仮想マシンはそのまま使い続けます。
PartyKids

2017/07/31 16:57

返信ありがとうございます! >railsやDBを実行するサーバは、本番環境と同じOSの仮想マシンにするべき そういうことなんですね!capistranoがデプロイツールなのは分かっていたのですが、仮想の中ですべて完結出来る状態がベストなのかが分からなく質問させていただきました。 まだ、開発では動いてたのに、本番では動かない。。という状況に出会ってないので、何を仮想に入れたら良いのかが分かっていないのが問題ですね。 >開発用、ステージングの仮想マシンはそのまま使い続けます やはりそうでしたか。。初めての仮想&環境作りだったので、失敗作仮想がすでに6個ぐらい出来てしまいました。何が必要かが分かっていくうちに、仮想で環境を作るのは簡単だなっという反面、簡単に構築出来るなら容量も結構あるので削除してもいいのかな?っと思いました! 本当にありがとうございます! mingosさんのおかげで、ここまでたどり着けました。 一通り、流れはつかめた?と思いますので、htmlとcssを勉強しながら、実際にアプリケーションを制作していきたいと思います。 ありがとうございました!
guest

0

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

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

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

IT用語辞典

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

投稿2017/07/25 08:58

編集2017/07/25 09:19
balaenoptera

総合スコア222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PartyKids

2017/07/25 09:47

返信ありがとうございます! >お客さんに検収をしてもらうための環境 わざわざリンク先を貼り付けて頂きありがとうございます! いきなり本番サーバーにアップするのは危険?かと思いましたので、それに似た環境を別途仮想で作って検証する環境の事をステージング環境と表現しました。 私個人が趣味レベルでする場合、顧客はいないので。。。。 そもそも、ゲストですべて作業するならば、開発と本番との差異なんて発生しないのでしょうか? てっきり、ホストで作業するから、ホストとゲストのos差等から本番環境に移行したら上手くいかない。。。が起こるのかと思っておりました。。。
balaenoptera

2017/07/25 10:55 編集

>いきなり本番サーバーにアップするのは危険?かと思いましたので、それに似た環境を別途仮想で作って検証する環境の事をステージング環境と表現しました。 >私個人が趣味レベルでする場合、顧客はいないので。。。。 そういう感じで大丈夫です。 >そもそも、ゲストですべて作業するならば、開発と本番との差異なんて発生しないのでしょうか? 開発環境構築でしたことをメモらないで構築すると本番構築時にうっかり漏れが出て開発・本番間で差異が出ることはあります。 本番で動かないみたいなことが起こる原因のあるあるです。 開発環境・ステージング環境は本番環境のミニチュアみたいなものと思っていただければと思います。
PartyKids

2017/07/25 10:18

返信ありがとうございます! 勉強不足で、至らない質問をして申し訳ございませんでした! 今後とも、よろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問