AtCoderをRubyで解いてみた!!(前編)
来たるコーディングテストへの対策として何が一番いいのか色々試しております。
その中で日本語&他の人の回答も見れるという点から『AtCoder』というサイトにたどり着きました!!(こりゃいいぞ)
自分の回答と照らし合わせてより良いコードとも照らし合わすことができるのでこりゃ最高ってことで自分なりに解いて見直しをしてみました!!
それじゃあ行ってみよう!!
前提
まずこちらの
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
の10問をRubyで自分なりに解きました。
こちらを別のタブで開き問題をみながら解いてみてください!
次にこちらの
AtCoder に登録したら解くべき精選過去問 10 問を Ruby で解いてみた - Qiita
を参考にリファクタリングしました!!
いやぁ、とても勉強になる。
Paizaなどはたとえ自分が合っていたとしても他の回答がみられないので僕みたいな経験がない身からするとやりずらかったです。
第1問
*自分*
a, b = gets.split.map(&:to_i)
puts (a * b).even? ? 'Even' : 'Odd'
*模範*
a, b = gets.strip.split.map(&:to_i)
puts (a * b).even? ? 'Even' : 'Odd'
*ポイント*
if分は3項演算子でシンプルにすればコードが短く書ける。
第2問
*自分*
s = gets.split("").map(&:to_i)
puts s.sum
*模範*
puts gets.strip.split("").map(&:to_i).inject(:+)
*ポイント*
・ sumメソッドはRubyバージョン2.4以降から利用できるメソッドみたい。
どうやらAtCoderのRubyバーションは2.3だから使えない。
・模範はinjectメソッドを使っているがこれからの事を考えて覚えておく必要性はない気がする。
・わざわざ変数に入れなくても
puts gets.split("").map(&:to_i).sum
としてもよかった。
第3問
*自分*
回答できませんでした。
*模範*
_n = gets.to_i
as = gets.strip.split.map(&:to_i)
cnt = 0
while as.all?(&:even?) do
cnt = cnt.succ
as = as.map { |a| a / 2 }
end
puts cnt
*ポイント*
・ 『全てが偶数である』という判別にall?という便利なメソッドがある。
・ Whileのループ技もしかっかり身につけたいところ
・all? (Enumerable) - Rubyリファレンス
第4問
*自分*
回答できませんでした。
*模範*
a, b, c, x = 4.times.map { gets.to_i }
cnt = 0
(0..a).each do |i|
(0..b).each do |j|
(0..c).each do |k|
cnt += 1 if i * 500 + j * 100 + k * 50 == x
end
end
end
puts cntputs cnt
*ポイント*
・同形式の複数の標準入力はtimesメソッドで受け取る。(コードが簡潔)
・複数の変数の組み合わせはeachメソッドで入れ子の繰り返しを行う
・後置if文記法を使う(コードが簡潔)
第5問
*自分*
n, a, b = gets.split(" ").map(&:to_i)n, a, b = gets.split(" ").map(&:to_i)
result = []
(1..n).each do |m|
result << m if m.to_s.split("").map(&:to_i).sum.between?(a, b)
end
puts result.sum
*模範*
n, a, b = gets.strip.split.map(&:to_i)
n,a,b = STDIN.gets.chomp.split(" ").map(&:to_i)
result = 0
(1..n).each do |i|
j = i
sum = 0
while j > 0
sum += j % 10
j = j / 10
end
if sum >= a && sum <= b
result += i
end
end
puts result
*ポイント*
・各桁の和を求めるには10で割った余りの合計を足していく方が主流だそうです。
・後置if文て結構便利なんだなってこんぐらいから痛感する。
・betweenメソッドは初めて触れたが使い勝手がいい。
・between? (Comparable) - Rubyリファレンス
感想
いざやってみるとプログラミングって難しいと改めて実感しますね。
しかし、論理立てて1つ1つ解いていくのはやはり楽しさの1つですね。
*1『チェリー本』で基礎は学習意しておりますが、その他での重要さはズバリ
『メソッド』だと感じました。
いくら配列や文字列の仕組みを理解できてもそこに変化を与えるメソッドを覚えないと意味がないと感じました。
コーディングテストに向けてさらに勉強あるのみですね。
後編は近々あげま〜す!!(自己満)
それじゃバイバイ!!
*1チェリー本
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る
【未経験】Railsでポートフォリオを作るまでの学習順序と具体的な教材について
先日勝又さんがTouTubeでRailsでポートフォリオを作るまでの順序と具体的な教材について動画を出されていましたので文章としてまとめいていきます。
自分自身にもすごくためになる動画になっております。
目次
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
はじめに
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
これは
①どのような順序で
②どのような教材を
学習していけばいいかに関して説明します。
学習順序
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
という流れになります。
もちろん、いきなりRubyとかJavaScriptの学習から始める方式もありだとは思いますが
2進数、16進数、CPU、メモリ、ハードディスク、データベース、ネットワーク、プログラムの基本構造などのコンピュータサイエンスの基礎知識に関しては、ある程度知っておかないと先に進めない場面が出てくるので、まずは先に片付けてしまう方が結局効率が良かったりします。
ここは飛ばしがちですよね。と言いつつ僕自身も飛ばしたのでのちに苦労しました。笑
その後Linuxの基礎を学習することでLinuxの様々なコマンドを一応理解できます。
この時点でいわゆるあの『黒い画面』つまりターミナルを使ってGUIではなくてコマンドライン色々な作業を行うための基礎知識が身につきます。
そしてその次に、HTML、CSS、JavaScriptの基礎を学習するとこの時点でとりあえず
Webアプリケーションのフロント部分の仕組みはなんとなく把握できるようになってきます。
そして次にRubyの基礎を学習することでWebアプリケーションのバックエンド開発の準備ができて、SQLの基礎を学習することでデータベースを扱うための準備ができ
さらにGItとGitHubのの基礎とRailsの基礎を学習することでRailsでポートフォリオを作成するための準備は一通り完了するということになります。
いやぁ、こりゃもっと知りたかった(^_^;)
もちろんもっと細かいことまで学習してもいいですが、できるだけ早く良質なポートフォリオを作成してモダンなWeb系自社開発企業さんでバックエンドとして働くことを目指している方であれば、作成前にこれ以上色々と手を出しても投資対効果は大して高まらないし、いわゆる『勉強のための勉強』になってしまう可能性が高いと思います。
ですので上記で挙げた範囲の学習をざっと学習したら、とにかくさっさとポートフォリオ作りに入ってしまうことをお勧めします。
ここで大事なことは、
・全てを理解できていなくても全然問題ないこと
・忘れてしまっていることがあっても全然問題がないこと
です!
まさに『 JUST DO IT !! 』です!!
学習教材
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
それぞれの学習項目に関するおすすめの教材を紹介していきます。
・コンピュータサイエンス基礎
「基本情報技術者試験」用の評判の良い参考書の内容をざっと勉強するのが恐らく本も効率が良い。
カリキュラムの内容としては、コンピュータサイエンス基礎の内容がとてもコンパクトにまとまっているので、とりあえず一冊ざっとやっておけばこの時点での学習範囲としては十分になります。
選別方法はAmazonのレビューなどを参考に購入してみてください。
勝又さんのオススメは「キタミ式イラストIT塾基本情報技術者」がイラストも豊富でオススメだそうです。
キタミ式イラストIT塾 基本情報技術者 平成31/01年 (情報処理技術者試験)
- 作者: きたみりゅうじ
- 出版社/メーカー: 技術評論社
- 発売日: 2018/12/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
・Linux基礎
「Linux標準教科書」が定番です。
こちらの書籍をざっと学習すればLinuxコマンド、ファイルの操作、グループとユーザーの権限管理、viというエディタの基本的な使い方、シェルスクリプト、その他Linuxを使う上での基本的な知識は理解できます。
- 作者: 宮原徹,川井義治,岡田賢治,佐久間伸夫,遠山洋平,田口貴久
- 出版社/メーカー: 特定非営利活動法人エルピーアイジャパン(LPI-Japan)
- 発売日: 2013/03/17
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
・HTML/CSS/JavaScript/Ruby/基礎
こちらは「Progate」の教材がいいのでそちらで勉強すれば十分。
多少物足りない方は動画付きの解説がある「ドットインストール」がオススメ。
・GitとGitHubの基礎
Progateでも十分ですがUdemyの「はじめてのGitとGitHub」という教材の評判もいいみたいなのでおすすめ。
・Rails基礎
こちらは定番の「Rails Tutorial」をやりきれば十分。
ここまで終わらせたらすぐにでもポートフォリオ製作に入りましょう。
大事なこと
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ここで大事なことは、
『学習を始めてからポートフォリオを作りきるまでの期間をできるだけ短くする』
ということです。
人間はどんどん古い記憶から忘れてしまいます。
学習から作成までの期間が数週間空いてしまうとまた復習から始めないといけないことになります。
ポートフォリオが前に進まずただ時間の無駄になってしまいます。
そうならないよう、なるべく記憶が新しいうちに作成に入り短期間で完成させられるようにしましょう。
ドラクエでいうなら『ガンガン行こうぜ!!』です。(きっと)
また、学習の最初のうちから『Mac』を使うようにしましょう。
現場では開発端末にMacを選択している人が大多数かつ、Windowsがらみで問題が発生してもMacと比較すると答えられる人が少なく、問題解決に無駄な時間を費やす可能性が高くなります。
ポートフォリオで大事なこと
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
基本的な機能を持ったメディア系のWebサービスを作りherokuへデプロイまで完了したとしても、
そこはやっとWeb系自社開発系企業さんへの転職活動が行える『スタートライン』
なたっただけであって、そこで肩の力を抜かないようにしましょう。
機能を豊富にしてみたり、インフラにAWSを使ってみたりなど色々工夫をしましょう。
採用担当者さんは『どれだけ頑張って勉強したか』ではなく『学習した内容を良質な成果物に落とし込め流だけの自走能力がるかどうか』をみています。
最後に
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
僕も現在就職活動に入りました。
この動画を拝見し自分自身にも非常に刺激になりました。
皆さんも同じ立場の方がいらっしゃいましたら頑張って行きましょう!!
RailsアプリをAWS EC2にデプロイする方法その④デプロイ編②
AWSを使って本番環境にデプロイさせたので今回はその方法を簡潔に分かりやすく4段階にわけて書いて行きます。
1・下準備編
RailsアプリをAWS EC2にデプロイする方法その①下準備編 - 21歳フリーターからrailsエンジニアになるまで
2・DB.サーバー構築編
RailsアプリをAWS EC2にデプロイする方法その②DB.サーバー構築編 - 21歳フリーターからrailsエンジニアになるまで
3・デプロイ編①
RailsアプリをAWS EC2にデプロイする方法その③デプロイ編① - 21歳フリーターからrailsエンジニアになるまで
4・デプロイ編②⇦今回ここ
RailsアプリをAWS EC2にデプロイする方法その③デプロイ編② - 21歳フリーターからrailsエンジニアになるまで
いよいよ最後だ!!!!!
頑張っていこう!!!!
11・Unicornの設定
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Unicornとはアプリケーションサーバーの一種です。
アプリ本体を格納するためのサーバーです。
早速インストールしていきましょう。
下記コマンドを実行して下さい。
[seiya|CHARME] $: vi Gemfile
-----------------------------
#以下を追記
group :production, :staging do
gem 'unicorn'
end
----------------------------
[seiya|CHARME] $ gem install bundler
[seiya|CHARME] $ bundle install
[seiya|CHARME] $ vi config/unicorn.conf.rb
---------------------------
viコマンドでconfig配下に生成したunicornの設定ファイルに、下記を記述します。
$worker = 2
$timeout = 150
$app_dir = "/var/www/rails/CHARME" (自分のアプリ名)
$listen = File.expand_path '/var/run/unicorn.sock', $app_dir
$pid = File.expand_path '/var/run/unicorn.pid', $app_dir
$std_log = File.expand_path 'log/unicorn.log', $app_dir
# set config
worker_processes $worker
working_directory $app_dir
stderr_path $std_log
stdout_path $std_log
timeout $timeout
listen $listen
pid $pid
# loading booster
preload_app true
# before starting processes
before_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
old_pid = "#{server.config[:pid]}.oldbin"
if old_pid != server.pid
begin
Process.kill "QUIT", File.read(old_pid).to_i
rescue Errno::ENOENT, Errno::ESRCH
end
end
end
# after finishing processes
after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
深追いはしませんがハマったポイントは参考にしていた記事はunicorn.sockとpidをtmp以下にセットしていましたがこれだとどうやらうまく読み込んでくれないみたいなので
var/run/下にセットしました!
12・Nginxの設定
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
NginxはWebサーバーにあたります。
これも先ほど出てきましたね。受付窓口です。
早速下記コマンドを打ち込んでください。
[seiya|~] sudo yum install nginx
[seiya|~]$ cd /etc/nginx/conf.d/
[seiya|conf.d]$ sudo vi CHARME.conf #自分のアプリケーション名でファイル名変更
viコマンドで作成したnginxの設定ファイルには、下記を記述します。
error_log /var/www/rails/CHARME/log/nginx.error.log; #自分のアプリケーション名に変更
access_log /var/www/rails/CHARME/log/nginx.access.log; #自分のアプリケーション名に変更
# max body size
client_max_body_size 2G;
upstream app_server {
# for UNIX domain socket setups
server unix:/var/run/unicorn.sock fail_timeout=0; #自分のアプリケーション名に変更
}
server {
listen 80;
server_name 54.95.23.50;
# nginx so increasing this is generally safe...
keepalive_timeout 5;
# path for static files
root /var/www/rails/CHARME/public; #自分のアプリケーション名に変更
# page cache loading
try_files $uri/index.html $uri.html $uri @app_server;
location @app_server {
# HTTP headers
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 360;
proxy_send_timeout 360;
proxy_read_timeout 360;
proxy_pass http://app_server;
}
# Rails error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/rails/CHARME/public; #自分のアプリケーション名に変更
}
}
ここでハマったポイントが1つあります。
try_files $uri/index.html $uri.html $uri @app_server;
location @app_server {
ここの@app_serverは上記の上から7行目でセットしたupstreamの名前に@をつけたものになりますのでご注意を!!(参考したサイトがそうなっておらずハマりまくりました笑)
また、設定ファイルの記述が終わったら、下記も実行してください。
[seiya|conf.d] cd /var/lib
[seiya|lib] sudo chmod -R 775 nginx
この呪文はpostメソッドでもエラーが出ないようにするためのものなのだとか。
「開けごま」的な勢いでとりあえず唱えてあげましょう。
これにて設定は完了です!!
13・MySQLの設定
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
続いてDBです。
(アプリケーションのDBがMySQLで作成されている前提で話を進めていきます。)
下記コマンドを打ち込み、MySQLに関する設定を変更していきましょう。
[seiya|CHARME]$ vi config/database.yml
----------------------------
production:
<<: *default
database: CHARME_production
username: root #ここをrootに変更する
password: #ここを空欄にする
----------------------------
[seiyai|CHARME]$ sudo service mysqld start #mysqldの起動
[seiyai|CHARME]$ ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
[seiyai|CHARME]$ rake db:create RAILS_ENV=production
[seiyai|CHARME]$ rake db:migrate RAILS_ENV=production
上記のように、
アプリのmigrationファイルが実行されたログが出て来れば無事成功です!!
14・Nginxの起動
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
先ほど設定したNginxを起動させましょう。
使うはたった1行のコマンド。
[seiya|CHARME]$ sudo service nginx start
これだけなんです!!(涙)
15・確認するぞ!!!!!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ついにここまできた。
アクセスしてみよう。。(手汗すごい)
52.64.~~~~~~~~~(ご自身のIPアドレス)
って、え??????(3度見はした)
まさに夢ならば〜どれほど〜よかったでしょう。ですね(涙)
よし、夢では終わらせないためにまずは、Unicornの起動確認。
このコマンドを打ち込んで、
seiya 24265 1 27 03:12 ? 00:00:01 unicorn_rails master -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production
seiya 24271 24265 0 03:12 ? 00:00:00 unicorn_rails worker[0] -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production
seiya 24273 24265 0 03:12 ? 00:00:00 unicorn_rails worker[1] -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production
こんな感じでなんだかゴニョゴニョ表示されていれば既に起動されています。
表示されない場合は下記を実行してください。
[seiya]$ unicorn_rails -c /var/www/rails/CHARME(アプリの名前)/config/unicorn.conf.rb -D -E production #unicornを起動させる
その後もう一度上記の起動確認コマンドを実行し、例のゴニョゴニョが出て来ればOKです。
その後、Nginxも再起動させます。
[seiya|CHARME]$ sudo nginx -s reload
これでもう一度アクセスしてみてください!!
アプリが表示されましたか?
ちなみに僕の場合これをやってもさっきのエラー画面のままうんともすんとも言わず3日ぐらい積みました(涙)
そんな3日の闇を解決してくれたのがこのコマンドでした!!
1.unicornの停止
2.rails assets:precompile RAILS_ENV=production の実行
3.unicornの再起動(上記コマンド)
この2のコマンドのおかげで無事デプロイすることができました!!!
本番環境に自分のアプリが映った時は嬉しすぎて泣きそうでした!!笑
最後に
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
皆さんも無事にデプロイできましたか??
これは僕みたいに勉強中の人たちのやくに少しでも役にたてたらいいなと思い書きました!!
何か質問などございましたらお気軽にどうぞ!!
ご連絡ございましたらメールかtwitterにてどうぞ!!
メールアドレス:yamasey_guchi@icloud.com
teittwr:https://twitter.com/yamasey712
RailsアプリをAWS EC2にデプロイする方法その③デプロイ編①
AWSを使って本番環境にデプロイさせたので今回はその方法を簡潔に分かりやすく4段階にわけて書いて行きます。
1・下準備編
RailsアプリをAWS EC2にデプロイする方法その①下準備編 - 21歳フリーターからrailsエンジニアになるまで
2・DB.サーバー構築編
RailsアプリをAWS EC2にデプロイする方法その②DB.サーバー構築編 - 21歳フリーターからrailsエンジニアになるまで
3・デプロイ編①←今回ここ
RailsアプリをAWS EC2にデプロイする方法その③デプロイ編① - 21歳フリーターからrailsエンジニアになるまで
4・デプロイ編②
RailsアプリをAWS EC2にデプロイする方法その③デプロイ編② - 21歳フリーターからrailsエンジニアになるまで
いよいよデプロイ編だよ!!頑張っていこう!!!!
(※コマンドは全てMacでの使用を想定しています。)
8・EC2へログイン
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
まずは、作成したインスタンスが起動しているのを確認してください。
EC2の「インスタンスの状態」が「running」になっていればOKです!!
こっからコンソール画面を使っていきますよ!!
まずは下準備
$ sudo easy_install pip
$ sudo pip install awscli
これらのコマンドを実行してください。
*ここでsudoをつけるとデンジャラスだよみたいな警告を受ける場合があります。*
インスタンスへのログイン設定
先ほど作成したインスタンスにログインをしていきます。
EC2インスタンスにログインできるユーザーとして、AWSでは、デフォルトでec2-userという名のユーザーが用意されています。
まずは、
1・ec2-userでログイン
2・新たなユーザー作成
3・作成したユーザーにec2-user と同等の権限を付与
4・新たなユーザーで再ログイン
の流れで進めていきます!
打ち込むコマンドは下記の通りです。
*[ ~ ] $: mv Downloads/CHARME.pem .ssh/
*[ ~ ] $: cd .ssh/
*[ .ssh ] $: chmod 600 CHARME.pem
*最後の@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください!!*
初回ログインの場合、上記コマンドを打ち込むと、
「本当に接続を続けるの...?」と聞かれますので恐れずに「yes」としましょう!
続いて新たなユーザーを作成し、作成したユーザーにマスター権限を与えていきます。
[ec2-user|~]$ sudo adduser seiya (名前)
[ec2-user|~]$ sudo password seiya
[ec2-user|~]$ sudo visudo
「passwd: すべての認証トークンが正しく更新できました。」と表示されればユーザー登録とパスワード変更が完了です。
*パスワードの基準が割と厳しめなのでランダムパスワードをググってやるといいかもです!!*
上記の最後のコマンドを実行するとVIMが開くと思いますので
1・rootに関する権限の記述箇所を探す(結構下の方)
root ALL=(ALL) ALL
2・その下に、作成したユーザーに権限を追加する記述
seiya ALL=(ALL) ALL を追加する
3・escを押してInputモード終了
4・Shift + zz で保存&編集終了
とやります。
編集が完了したら
[ec2-user|~]$ sudo su - seiya
このコマンドでユーザーの切り替えを行います。
無事に[ec2-user|がseiya(作成したユーザー名)と切り替わればOKです。
SSH通信によるインスタンスへのログイン
続いては実際にSSHという通信方法を用いてインスタンスにログインしていきます。
流れとしては
1・ローカルで鍵の生成
2・その鍵をどの通信の認証時に使用するか等を設定
3・サーバーとの認証処理を行う
4・実際に新ユーザーでログイン
という流れでいきます!!
早速行ってみよう(ここからはローカルでの作業です!!)
[~]$ cd .ssh
(#公開鍵を作成)
-----------------------------
Enter file in which to save the key ():CHARME_key_rsa
(#ここでファイルの名前を記述して、エンター)
Enter passphrase (empty for no passphrase):
(#何もせずそのままエンター)
Enter same passphrase again:
(#何もせずそのままエンター)
-----------------------------
[.ssh]$ ls
#「CHARME_key_rsa」と「CHARME_key_rsa.pub」が生成されたことを確認
[.ssh]$ vi config
(#VIMを起動し、設定ファイルを編集する)
-----------------------------
# 以下を追記
Host CHARME_key_rsa
Hostname 前出のElastic IP (#自分の設定に合わせて)
Port 22
User seiya (#先ほどのユーザー名)
IdentityFile ~/.ssh/CHARME_key_rsa (#秘密鍵の設定)
-----------------------------
上記により、
1.ローカルで鍵の生成
2.その鍵をどの通信の認証時に使用するか等を設定
ここまでが完了しました。 続けて見ていきます。
(ここからはサーバー側の作業です!!)
[seiya|~]$ mkdir .ssh
[seiya|~]$ chmod 700 .ssh
[seiya|~]$ cd .ssh
[seiya|.ssh]$ vi authorized_keys
(#vimが開く)
-----------------------------
ssh-rsa sdfjerijgviodsjcIKJKJSDFJWIRJGIUVSDJFKCNZKXVNJSKDNVMJKNSFUIEJSDFNCJSKDNVJKDSNVJNVJKDSNVJKNXCMXCNMXNVMDSXCKLMKDLSMVKSDLMVKDSLMVKLCA shizuma@shizuma-no-MacBook-Air.local
(#先ほどコピーした鍵の中身を貼り付け)
-----------------------------
[seiya|.ssh]$ chmod 600 authorized_keys
[seiya|.ssh]$ exit
[ec2-user|~]$ exit
これで新ユーザーに見事権限が付与されたはず!!
ローカルで下記コマンドを入力し、実際にログインできるか試してみましょう。
ログインできれば、無事ユーザー設定は終了です。
9・EC2インスタンスの環境構築
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
次は、作成したEC2インスタンス内でrubyやその他の環境が動くよう設定していきます!!
[seiya] sudo yum install \ #yumのインストール
git make gcc-c++ patch \ #cとc++のコンパイラ、gitの差分をpatchファイルに変更
openssl-devel \
libyaml-devel libffi-devel libicu-devel \
libxml2 libxslt libxml2-devel libxslt-devel \
zlib-devel readline-devel \
mysql mysql-server mysql-devel \
ImageMagick ImageMagick-devel \
epel-release
1行づつ実行していってください。もう呪文です。はい!
途中で『こんだけインストールしても大丈夫??』みたいなのが出ますが
「y」を打ち込んでEnterをしてください!!
次はNode.jsのインストール。
[seiya|~]$ sudo yum install nodejs npm --enablerepo=epel
これも確認が出てくるので、「y」→Enterをしてください。
そして、rbenvのインストール→パスを通して→ruby-buildのインストールです。
[seiya|~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
(#rbenvのインストール)
[seiya|~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
(#パスを通す)
[seiya|~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[seiya|~]$ source .bash_profile
(#.bash_profileの読み込み)
[seiya|~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
(#ruby-buildのインストール)
[seiya|~]$ rbenv rehash
(#rehashを行う)
そしていよいよ、rubyのインストールです。
# ruby 2.1.3のインストール(versionは適宜変更)
[seiya|~]$ rbenv install -v 2.1.3
[seiya|~]$ rbenv global 2.1.3
[seiya|~]$ rbenv rehash
[seiya|~]$ ruby -v
ruby -vコマンドで、しっかりとrubyのバージョンが表示されれば成功です。
10・gitとの連携、アプリのクローン
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
次は、ご自身で作成されたアプリをgitからクローンし、EC2インスタンス内に配置していきます。(やっとここまで来たかぁ)
vi コマンドで.gitconfigというgitに関する設定ファイルを生成します。
[seiya|~]$ vi .gitconfig
そして下記のように設定しましょう。
[user]
name = your_name (#gitに登録した自分の名前)
email = hoge@hoge.com (#git登録時の自分のメアド)
[alias] (#これはお好きに)
a = add
b = branch
ch = checkout
st = status
[color] (#色付け)
ui = true
# githubの場合
[url "github:"] (#pull、pushのための設定)
InsteadOf = https://github.com/
InsteadOf = git@github.com:
# bitbucketの場合
[url "bitbucket:"]
InsteadOf = https://ユーザ名@bitbucket.org/
InsteadOf = git@bitbucket.org:
完了したらファイルを保存し、
アプリを配置するディレクトリを作成していきます。
[seiya|~]$ cd /
[seiya|/]$ sudo chown seiya var (#varフォルダの所有者をseiyaにする)
[seiya|/]$ cd var
[seiya|var]$ sudo mkdir www
[seiya|var]$ sudo chown seiya www
[seiya|var]$ cd www
(#wwwと同じ処理)
[seiya|www]$ sudo mkdir rails
[seiya|www]$ sudo chown seiya rails
下準備が整ったら、いよいよgitとの接続です。
まずは、下記コマンドを打ち込んでください。
[seiya|www]$ cd ~
[seiya|~]$ mkdir .ssh (#既に生成されている場合もあります。)
[seiya|~]$ chmod 700 .ssh
[seiya|.ssh]$ ssh-keygen -t rsa
-----------------------------
Enter file in which to save the key ():aws_git_rsa
(#ここでファイルの名前を記述して、エンター)
Enter passphrase (empty for no passphrase):
(#何もせずそのままエンター)
Enter same passphrase again:
(#何もせずそのままエンター)
-----------------------------
(#「aws_git_rsa」と「aws_git_rsa.pub」が生成されたことを確認)
-----------------------------
# githubの場合以下を追記
Host github
Hostname github.com
User git
IdentityFile ~/.ssh/aws_git_rsa (#秘密鍵の設定)
# bitbucketの場合以下を追記
Host bitbucket
Hostname bitbucket.org
User git
IdentityFIle ~/.ssh/aws_git_rsa (#秘密鍵の設定)
-----------------------------
[seiya|.ssh]$ cat aws_git_rsa.pub
-----------------------------
ssh-rsa sdfjerijgviodsjcIKJKJSDFJWIRJGIUVSDJFKCNZKXVNJSKDNVMJKNSFUIEJSDFNCJSKDNVJKDSNVJNVJKDSNVJKNXCMXCNMXNVMDSXCKLMKDLSMVKSDLMVKDSLMVKLCA seiya@ip-10-0-1-10
catで表示させた公開鍵を、githubにアクセスして登録していきます。
gitへの公開鍵登録に関しては下記サイトが参考になります。
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita
ちなみに、「Bad owner or permissions on~~~~」と言われてしまった場合は、configファイルの権限を変更する必要があります。
[seiya|.ssh]chmod 600 config
でファイルの権限を変更した後、再び、
を実行してみてください。
・githubの場合
Hi seiya! You've succwwwessfully authenticated, but GitHub does not provide shell access.
・bitbucketの場合
logged in as seiya.
このようなメッセージが返って来れば接続成功です。
登録が済んだら、いよいよクローンです!!!!
git cloneの後に続くURLは、githubの下記より取得してください。
これでめでたくクローンが出来た...かと思います!(できてておくれ(゚∀゚))
確認のために、下記コマンドを実行してみてください。
[seiya|.ssh]$ cd /var/www/rails
[seiya|rails]$ ls
ご自身のアプリ名が記載されたフォルダが存在すれば、見事クローン成功です!!
おめでとうございます!!
アプリのsecret_key_baseの設定
クローンが成功したら、railsファイルのconfig/secrets.ymlに記述されている、secrets_key_baseを変更していきましょう。
こちらを参考に行なってください
Rails5.1をproduction環境で起動する際の秘密鍵設定 - Qiita
この記事のsecret_key_baseに下記の方法で生成したシークレットキーを使ってください。
今回は本番にあげるアプリの設定を変更するので、productの欄のみ編集すれば大丈夫です。
* 僕の場合Rails5.1.6でやっていたのでこの方法ですがどうやらRails5.2から違う方法が新しく追加されたみたいですね!(もちろんこれでもできます)
まずはシークレットキーを生成していきます。
[seiya|rails] $: cd CHARME
[seiya|CHARME] $: rake secret
(#シークレットキーを生成)
-----------------------------
jr934ugr89vwredvu9iqfj394vj9edfjcvnxii90wefjc9weiodjsc9o i09fiodjvcijdsjcwejdsciojdsxcjdkkdsv
(#表示されるkeyをコピーする)
-----------------------------
[seiya|CHARME] $: cd /
[seiya|/] $: sudo vi /var/www/rails/CHARME/config/secrets.yml.key(後述)
上記の最後のコマンドで入力する値はローカル環境内のsecrets.yml.key内をコピペすればOKです!!
これで無事、生成されたシークレットキーをproduction環境に反映出来たことになります。
さぁ、これでやっとこさサーバーにアプリがあがるところまで行くことができました!!!
疲れたね。
あと少し!!!!!
頑張っていこう!!!!
次章:デプロイ編②