質問: Railsチュートリアルをやり始めた初心者です。 色々な固有名詞が出てきて、個々の機能はある程度調べられても、 連携プレイのことを説明してくれているところがあまりありません。自分の理解が不安です。 私の認識に間違いがあるか、チェックして頂けますでしょうか。 流れとしては、 Gemなどコーディングの前準備 ↓ Gitの管理下へ ↓ BitbucketやHerokuと連携 ↓ 環境とDBについて という感じです(チュートリアルに沿っている)。 Cloud9使ってます。 ではよろしくお願いいたします。 ### コーディングの前準備 * まずcloud 9という環境に、作りたい**Sample_app**のワークスペースを作る。 * 次にRailsという、Ruby開発をより便利にするための機能を入れます(フレームワークと言いう)。 * Gemという、これまた開発を楽にしてくれるプチ機能集みたいなものがあり、これはバイキングのように好きなものを好きなだけ自分で選んで、入れる。 * 必要なディレクトリやファイルを作る。 さっそくRailsの力を使って、**rails new Sample_app**と書けば、いっぺんにワークツリーができあがる。 これでアプリをつくる用意ができた。 ### 安全のためのGit * アプリは作っていく上でバージョン管理下に置くのが望ましい。 ファイルの変更記録が管理されるので、ミスをカバーしやすくなる。 * Gitを使うとすると、まず**git init**でリポジトリを作成、**git remote add**でリモートリポジトリを登録、**git add→git commit→git push**でチームのみんなもそのファイルを自由に見たりいじったりできるようになる。 (git initせず、**git clone**で、他人が作ったものをコピーしてきて、そこで作業し始めることも多々あり) これで安心してコーディングを進められるぞ。 ### 共有とデプロイ * Gitのリポジトリを管理して、他の人と共有したりをしやすくするサービス**Bitbucket**。 デプロイが簡単になる**Heroku**。 * GitのコマンドでGitのSSH公開鍵を取得して、BitbucketとHerokuに教えてあげる。すると、Gitと両サービス間で、データのやり取りができるようになる。 まずBitbucketから・・・ * Bitbucketはサイトへ行き、GUIでリポジトリを作ってあげる。 * ターミナルで**git remote add origin git@bitbucket.org:ユーザー名/アプリ名.git** と書くと、そのアプリはBitbucketへpushされるやつらのための「控え部屋」へ入れられる。 git commitはやらないで(理由わからないけど)、 **git push -u origin --all**でBitbucketへアップロードされる。 続いてHerokuです * ターミナルで**Heroku login**し、**Heroku create**で、Heroku上に、アプリを置く場所を作る。 * **git push heroku master**でアップロード(この場合デプロイ)。 すると、普通のサイトと同じように、ブラウザの検索窓にURLをうちこめば、見られるようになる。 ### 開発環境と本番環境のDBが合わない問題の解決 順番的にはデプロイの前にやっておくことですが、内容上別添えにしました。 * DBに関しては、Cloud9では**SQLite**しか、Herokuでは**PostgreSQL**しか使えない。 だから、それぞれの環境で、それぞれのGemが動くように、Gemfileの記述を調整しておく(開発・テスト用SQLiteには**group :development, :test do ~ end**、 本番用PostgreSQLは**group :production do ~ end**)。 * 上記でGemfileの調整はしたものの、いつものように**bundle install**すると、SQLiteもPostgreSQLもインストールされてしまう。 ひとつのAppに2つもDBがあるのはおかしいので、bundle installに特殊なフラグ**--without production**をかきくわえ、本番用のPostgreSQLだけインストールされないようにする。 * (PostgreSQLを(**--without production**で除外して結局インストールしないくせに)Gemfileに書くのは、Gemfile.lockに伝えておくため。伝えておかないと、デプロイしたとき、うまくいかない) 。。。以上、私なりの懸命な解釈です。 いかがでしょうか。
回答: cloud9、サクッと始めるには便利ですよね! とりあえず、気になった点として、 > > 開発環境と本番環境のDBが合わない問題の解決 > > > ですが、環境毎にどのDBを利用するか、またその設定値などを決定するのはdatabase.ymlの仕事ではないかなと思います。 そこで、productionやstaging, development毎に設定します また、環境毎に余計なgemをロードしないように、gemfileには ``` group :production do gem 'pg' end ``` のように環境毎に必要なgemを切り分けて記載することもできます。