niki12260714の日記

フリーランスのITエンジニアの呟き。

AWS Cloud9でPostgreSQLを使ったrailsプロジェクトを立ち上げる

画面設計、DB設計に着手したんで、本格的に開発環境を整えていきます。
ということで、sqliteではなく、PostgreSQLを使って開発することになりましたので、その設定。
例によって、自分メモです。
参考にしたのはこちら。

qiita.com

お手本通り、コマンドを打っていきます。
PostgreSQLの本家サイトに行くと、最新バージョンが「10.4」になっているので、それを入れるべきだと思ったんですが、「sudo yum -y install postgresql94」青字のバージョン指定の番号が「104」だと「そんなパッケージ無いよ」って怒られたので、書き方分からずに、お手本に従いました。
まぁ必要になればアップデートすればよい話!

「sudo yum -y install postgresql94」←ポスグレのインストール
「sudo yum -y install postgresql94-devel」←ポスグレの開発環境のインストール
「sudo yum -y install postgresql94-server」←ポスグレサーバーのインストール
psql --version」←ポスグレが入ったか、ポスグレのバージョン確認

「sudo /etc/init.d/postgresql94 initdb」←ポスグレの初期化
「sudo /etc/init.d/postgresql94 start」←ポスグレの開始

「sudo -u postgres psql」←ポスグレに接続
  「postgres=# alter role postgres with password 'hogehoge';」←青字のところはポスグレに入ってますよの表示、実際に打つのはalterから。postgresロールのパスワードを任意に変更
  「postgres=# create database [database_name] owner [user_name];」←DB作成
        「postgres=# \q」←ポスグレから抜ける

※お手本だと次にconfファイルを書き換えていますが、これが見つからなかったので一旦棚上げ
→2018/5/21追記:ここを書き換えていないとrake dbが失敗します。リカバリーについてはこちら。

AWS Cloud9でPostgreSQLに対しrake db:migrateが失敗する - niki12260714の日記

次にRailsアプリを作成します

rails new myapp -d postgresql

出来たフォルダの中から「/config/database.yml」を開くと、「adapter:postgresql」となっているので、ポスグレ接続設定はできている模様。
なので、デフォルト接続のところに、DB接続のロール名とパスワードを記載しておきました。
以上終了。
あとは実際に作っていきます。

Gemfile編集後のbundle updateでコンフリクト発生時の対応

Gemfileに新しいgemを追加して、「bundle update」を叩くとエラーが出ました。

『Bundler could not find compatible versions for gem "actionview"』

ググってみると、バージョンが競合してますよ、ってことらしい。
「gem list」で今入っているgemのリストを見てみると、

actionview (5.1.6, 5.1.5, 5.1.4)』

となっており、確かに3つのバージョンが混在している。
なんでこうなっているのかを調べた結果、追加しようとしたgemのバージョンと既に入っているバージョンが合わないから、らしい。
入れようとしたgemは、以下のように書いていました。

『gem 'bootstrap-sass', '3.3.1'』

バージョン3.3.1を入れようとすると、既存のgemと衝突してしまう。
ならばどうするかというと、「このバージョン以上のものを」と指定してあげれば、bundle updateが適切なバージョンを入れてくれるとのこと。
なので、

『gem 'bootstrap-sass', '>= 3.3.1'』

という風に書き換え、bundle updateを実施、エラーが無くなりました!

AWS Cloud9で編集してからgithubへpushするまでのコマンド

gitを使い慣れていない自分のコマンドメモとして。

1.ブランチを切る
AWS Cloud9のbashで、今自分がいるブランチがmasterブランチであることを確認してから実施
「git checkout -b "ブランチ名"」
→実行すると指定したブランチ名に切り替わる

※この後にコード編集を行う。
編集して、ステージに乗せられるようになったファイルは「git status」で確認できる

2.ステージに乗せる
「git add.」

3.コミットする
「git commit -m "編集コメント"」
※編集メッセージが無いとハマって抜け出せないので注意。
→もしかしたら抜け出す方法があるかもしれないけどコメントは絶対に書いた方がいいので、コメント無しにする方法を探すメリットはないと思われる

4.masterブランチにマージする
「git checkout master」
「git merge "ブランチ名"」
→マスターブランチに入り、マスターからマージするイメージ
→この後に編集したブランチは削除する(しなくてもいい、どっちでも)
 「git branch -d "ブランチ名"」

5.githubにpushする
「git push -u origin master」
→ここでIDとパスワードを聞かれるので、入力する

以上!

AWS Cloud9でgithubからcloneしたRuby on Railsを動かす

当然っていえば当然なんですが、cloneしてきただけだと動かないわけで。
こちらを参考にして、動作させるべく四苦八苦。

tyoshikawa1106.hatenablog.com

こちらにある通り、「gem install bundler」を実施。
こっちは成功。
なので、次に「bundle install 」を実施したところ、「could not locate gemfile」というエラーが出ました。
gemfileはちゃんとあるんだけどなぁ……と思って、さらにググったところ、gemfileがあるフォルダに移動してからコマンドを叩かないと行けなかった模様。
cdコマンドでgemfileがあるディレクトリに移動してからコマンドを叩くと成功しました。
で、AWS Cloud9ではrailsの起動は「rails start」ではなく、「rails s -b $IP -p $PORT」というなんか長いオプションが必要になります。
bundle installが成功すると、これが効くようになります。
※やっていないと、そんなコマンド無いよ、と怒られます
サーバーを起動してから画面上部にあるPreviewを見てみると、「ActiveRecord::PendingMigrationError」というエラーが発生しています。
参考にしたページにもあり、またエラーをググると同じ現象が出ていますが、つまりはdbをmigrateしてないよ、っていうことらしい。
なので、「rails db:migrate」を実行しましたが、私の環境だとあるテーブルが存在しないよ、というエラーが出てしまいます。
つらつらエラーを眺めていたんですが、どうやらmigrateフォルダに入っている、作成中にmigrateしたなにかが足りなくなっている模様。
ぬーん、ならば更新履歴なんていらないんだから消しちゃえ。
ってことで、/db/migrateフォルダに入っている奴を全消ししたのに、再度「rails db:migrate」を実行、エラーなし。
再び「rails s -b $IP -p $PORT」を実行し、previewを押すとエラーは無くなり、白い画面になりました。
なので、ログイン画面に移動すべく、末尾に「/login/index」と足してEnterを押したら真っ白……
あれ?
ターミナル見ると、ちゃんと動いているっぽいけど……
でもまぁ、動かすところまではできました!

AWS Cloud9にgithubからcloneしてくる

これで合っているかいまいちわからんのですが、githubにある自分のレポジトリを、AWS Cloud9にクローンしてきました。
参考にしたにはこちら。

docs.aws.amazon.com

Cloud9にgit環境の導入のため、以下のコマンドをそれぞれ叩きます。
sudo yum -y update
sudo yum -y install git
で、gitが入ったかどうか「git --version 」で確認。

f:id:niki12260714:20180420091647j:plain

ちゃんとバージョン情報が表示されたので、入ったようです。
次に自分のgitのIDとメールアドレスを登録

git config --global user.name "USER_NAME"

git config --global user.email EMAIL_ADDRESS

こちらは特にレスポンス無し。
ちょっと不安でしたが、次に自分のgithubのページに行って、cloneしてくるレポジトリのURLをコピーしてきます。

f:id:niki12260714:20180420091954j:plain

「Clone or download」をクリックするとURLが表示されるので、そのURLをコピー。
で、cloud9に戻って、コマンドを叩きます。
「git clone "URL"」

f:id:niki12260714:20180420092228j:plain

するとcloneされてきて、確かに自分がgithubにあげたコードが落ちてきています。
以上終了!

AWS Cloud9でRuby on Rails開発環境を構築する(とりあえず完成)

どうにもCodeStarからCloud9が作れないので、これはCloud9でrubyインストールした方が早いな、と判断。
※きっと英語がすらすら読めればエラー解読できると思うんですが、出来なかった……
 多分、なんかキーが足りてないor権限設定をしてないのが問題という気がする
というわけで、Cloud9のページに行って、直接「Create environment」ボタンを押して、環境を構築。

f:id:niki12260714:20180419100737j:plain

開発環境の名前を入れ、Next stepへ。
次の設定はなにも変えず、最後までボタンぽちぽち。
で作られたのが空の環境。
ここにrubyを入れます。

f:id:niki12260714:20180419101034j:plain

bashから「rvm install 2.0.0」を実行すると、「error(23)」が出て失敗。
ぐぐってみると、どうやらroot権限がないユーザーはrvm installが実行できないよ、ということらしい。
うーん、クラウドに借りている開発環境だから、bashの実行ユーザーを変えるってのはできないのか?
でもそうすると、ruby環境を構築できないじゃないか、どうやってやるんだろう、ともうちょっと見てみると、こちらのページに行き当たりました。

d.hatena.ne.jp

「rvmsudo rvm install 2.0.0」で実施したところ、成功!
「WARNING: Please be aware that you just installed a ruby that is no longer maintained (2017-04-01), for a list of maintained rubies visit:」の警告が出てきましたが、これは最新版入れてないと出てくるものなのでしょう。
というわけで、rubyを入れられたので、次はrailsを入れます!

追記:
railsのインストールもrvmsudoでできました。
「rvmsudo rvm gemset install rails -v 4.0.5」でさくっ、と入ったので、バージョン確認。
ruby -v」「rails -v」でそれぞれ、バージョン番号が表示されることを確認したので、これでrails開発環境は構築できたようです!

AWS Cloud9でRuby on Rails開発環境を構築する(途中経過)

今週からプログラム塾に通っています。
通うって言っても、オンライン学習ですけれど、侍エンジニア塾さんのお世話になっています。

早速、コーチの方と面談をし、作るアプリについて概要をお話しました。
そちらはまた別途。
そこで宿題が出されまして、「Amazon Cloud9に、これまで作ったrubyのアプリを移行すること」です。
なので、Amazon Cloud9とはなんぞや、ruby on railsを移行するにはどうすればいいのかを調べていて、振り返りも含めて、ここに記述します。

Amazon Cloud9は、簡単に言うと、Webで行える開発環境です。
開発環境構築って大変ですよね……開発マシンのOSやら、元々入っているソフトとの絡みやらなにやら……。
そういうのをまとめてWebでやっちゃおう! っていうもの。
そしてWebにあることで、他の人から参照するのが簡単になり、コードレビューもしやすくなるそう。
なるほど、これはプログラムの勉強には良さそう。

というわけで、AWSのアカウントを作成。
これにはクレジットカードと電話番号が必要になります。
クレカは、なにか料金がかかるわけではなく(有料のを使う時にはここから使うよ、という旨のメッセージは出てくる)、アカウント作るだけなら無料です。
悪いことする人が使ったから、その対策らしい。
こっちはさくっ、とできたので、さてCloud9をいれるには、とググってみたら、丁度ぴったりのページを発見。

qiita.com

こちらをもとに、環境構築へ。
まずはCodeStarで、作る言語と環境のセットを設定。

f:id:niki12260714:20180418112935j:plain

凄い沢山言語がある……goもPythonも、Node.jsもある……!
Node.jsは触ってみたかったんで、Ruby環境構築したらやってみようとか考えつつ、参考ページを見てボタンぽちぽち。

で、エラーですよ!

f:id:niki12260714:20180418120031j:plain

肝心のCloud9の構築が上手く行っていない模様。
でもIDEを新規作成>Cloud9でやると、「この名前の環境はすでに存在します」って言われるんですよね……なんだろう……。
とりあえずは、ここまで。