- 投稿日:2020-03-01T23:20:18+09:00
laravelの学習のために音楽レビューを投稿できるサイトを作成した
Web製作会社でマークアップエンジニアとして1年業務を行いました。
その中で、今後はバックエンドに携わっていきたいと思いPHPの勉強を始め、laravelでウェブサービスを作ってみました。
まだまだ、理解していないところがあるので引き続き勉強します。トップページ
トップページはメインビジュアルとサービスの紹介です。
下の方にある「投稿一覧ページへ」のボタンから投稿一覧へリンクします。投稿一覧ページ
検索フォームにテキストを入れると該当のテキストが入力されている投稿だけ表示します。
「投稿一覧詳細ページへ」のボタンから各投稿の詳細ページに飛ぶことが出来ます。投稿詳細ページ
各カテゴリの詳細を表示します。
投稿の「編集」と「削除」については、投稿したアカウントのみ可能な仕様です。投稿編集ページ
現在の投稿内容がテキストボックスに表示され、投稿を修正後に「作成する」を押すと確定します。投稿について
ログインした状態のみ、ウインドウの右下に「レビューする」が表示され、投稿ページに移動できます。投稿ページ
各カテゴリの内容を入力して「作成する」を押すと投稿が作成できます。今後の修正点
・投稿一覧ページでのページネーションの実装。
・カテゴリ、投稿者名での検索をできるようにする。
- 投稿日:2020-03-01T21:31:57+09:00
【初心者向け】AWS EC2デプロイ時にでるエラーを解決する
自作したアプリケーションをAWS上にデプロイする際に、いくつかエラーが出てつまづいたので、どうやって解決したかをまとめ的な感じでつらつらと書いていきます。
各エラーの内容にはそこまで踏み込まず、解決するという部分にフォーカスしてます。なお、デプロイ時は、下記のQiita記事を参考に行いました。
題の通り、世界一丁寧でした。。。誠に有難うございます。。。世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
環境
macOS:10.14.6
Ruby:2.5.7
Rails:5.2.4.1①ssh: connect to host [作成したEC2のElasticIP] port 22: Operation timed out
これは、EC2インスタンスにsshログインした時に出たエラー。
$ ssh -i [app名].pem ec2-user@[作成したEC2のElasticIP] ssh: connect to host [作成したEC2のElasticIP] port 22: Operation timed out解決方法
1.AWSコンソールに入り、AWSのサービスからEC2を選択
2.左のメニューバーからセキュリティグループを選択
3.インバウンドを選択
4.編集
5.タイプ:SSH、ソース:マイIPのルールを追加
6.保存これでsshログインできるようになります。
ちなみに自分のIPアドレスはwi-fi環境により異なったりするので注意が必要です。②ERROR: Ruby install aborted due to missing extensions
これは、EC2インスタンスにrubyをインストールする際に出たエラー。
$ rbenv install -v 2.5.7 ~ #省略 ~ BUILD FAILED (Amazon Linux AMI 2018.03 using ruby-build 20200224) Inspect or clean up the working tree at /tmp/ruby-build.20200229053400.25770.gpU4NA Results logged to /tmp/ruby-build.20200229053400.25770.log Last 10 log lines: installing capi-docs: /home/irikawa/.rbenv/versions/2.5.7/share/doc/ruby The Ruby readline extension was not compiled. ERROR: Ruby install aborted due to missing extensions Try running `yum install -y readline-devel` to fetch missing dependencies.解決方法
これはエラー文に書かれている以下のコマンドを実行し、
$ sudo yum install -y readline-develその後、rubyをインストール
$ rbenv install -v 2.5.7 ~ #省略 ~ Installed ruby-2.5.7 to /home/user/.rbenv/versions/2.5.7無事入りました。
③EC2インスタンスにmaster.keyを作成する
これは特別エラーが出たわけではないのですが、考え方の整理として。
rails5.2以上では、rails newをしたタイミングで、「credentials.yml.enc」と「master.key」が生成されます。
それぞれの役割は、超ざっくり説明すると、「credentials.yml.enc」が鍵穴で、「master.key」が鍵という位置付けになり、「credentials.yml.enc」を複合する際には「master.key」が必要になるとのこと。ローカル環境で開発している段階では特別意識しなくても良いのですが、EC2にあげるタイミングで.gitignoreに書かれている「master.key」はEC2側には渡ってくれません。
なので、以下の方法でEC2側に「master.key」を手動で作成してあげる必要があります。
まずはローカル環境でmaster.keyの中身をコピーします。
以下のコマンドを打って出てくる英数字の暗号みたいなものをコピーする。local.~/myapp$ vi config/master.key次にEC2側にmaster.keyを以下のコマンドで作成し、先程コピーしたものをペーストします。
server.[user|myapp]$ vim config/master.key保存して終了。これでOKです。
④bundle install時、mysqlが入らないエラー:Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
EC2インスタンス内でbundle install時に以下のエラー。主要部分のみ抜粋してます。
server.[user|myapp]$ bundle install ~ #省略 ~ Gem::Ext::BuildError: ERROR: Failed to build gem native extension. ----- mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again. ----- An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.mysqlクライアントがないというエラーみたいですね。
エラー文に書いている以下のコマンドを実行。
server.[user|myapp]$ sudo yum install mysql-develその後、bundle installしたら無事mysqlが入りました。
一旦、以上になります。
今後随時更新していきます。
- 投稿日:2020-03-01T21:31:57+09:00
【AWS】RailsアプリをEC2デプロイした時にでたエラーを解決する
自作したアプリケーションをAWS上にデプロイする際に、いくつかエラーが出てつまづいたので、どうやって解決したかをまとめ的な感じでつらつらと書いていきます。
各エラーの内容にはそこまで踏み込まず、解決するという部分にフォーカスしてます。なお、デプロイ時は、下記のQiita記事を参考に行いました。
題の通り、世界一丁寧でした。。。誠に有難うございます。。。世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
環境
macOS:10.14.6
Ruby:2.5.7
Rails:5.2.4.1①ssh: connect to host [作成したEC2のElasticIP] port 22: Operation timed out
これは、EC2インスタンスにsshログインした時に出たエラー。
$ ssh -i [app名].pem ec2-user@[作成したEC2のElasticIP] ssh: connect to host [作成したEC2のElasticIP] port 22: Operation timed out解決方法
1.AWSコンソールに入り、AWSのサービスからEC2を選択
2.左のメニューバーからセキュリティグループを選択
3.インバウンドを選択
4.編集
5.タイプ:SSH、ソース:マイIPのルールを追加
6.保存これでsshログインできるようになります。
ちなみに自分のIPアドレスはwi-fi環境により異なったりするので注意が必要です。②ERROR: Ruby install aborted due to missing extensions
これは、EC2インスタンスにrubyをインストールする際に出たエラー。
$ rbenv install -v 2.5.7 ~ #省略 ~ BUILD FAILED (Amazon Linux AMI 2018.03 using ruby-build 20200224) Inspect or clean up the working tree at /tmp/ruby-build.20200229053400.25770.gpU4NA Results logged to /tmp/ruby-build.20200229053400.25770.log Last 10 log lines: installing capi-docs: /home/irikawa/.rbenv/versions/2.5.7/share/doc/ruby The Ruby readline extension was not compiled. ERROR: Ruby install aborted due to missing extensions Try running `yum install -y readline-devel` to fetch missing dependencies.解決方法
これはエラー文に書かれている以下のコマンドを実行し、
$ sudo yum install -y readline-develその後、rubyをインストール
$ rbenv install -v 2.5.7 ~ #省略 ~ Installed ruby-2.5.7 to /home/user/.rbenv/versions/2.5.7無事入りました。
③EC2インスタンスにmaster.keyを作成する
これは特別エラーが出たわけではないのですが、考え方の整理として。
rails5.2以上では、rails newをしたタイミングで、「credentials.yml.enc」と「master.key」が生成されます。
それぞれの役割は、超ざっくり説明すると、「credentials.yml.enc」が鍵穴で、「master.key」が鍵という位置付けになり、「credentials.yml.enc」を複合する際には「master.key」が必要になるとのこと。ローカル環境で開発している段階では特別意識しなくても良いのですが、EC2にあげるタイミングで.gitignoreに書かれている「master.key」はEC2側には渡ってくれません。
なので、以下の方法でEC2側に「master.key」を手動で作成してあげる必要があります。
まずはローカル環境でmaster.keyの中身をコピーします。
以下のコマンドを打って出てくる英数字の暗号みたいなものをコピーする。local.~/myapp$ vi config/master.key次にEC2側にmaster.keyを以下のコマンドで作成し、先程コピーしたものをペーストします。
server.[user|myapp]$ vim config/master.key保存して終了。これでOKです。
④bundle install時、mysqlが入らないエラー:Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
EC2インスタンス内でbundle install時に以下のエラー。主要部分のみ抜粋してます。
server.[user|myapp]$ bundle install ~ #省略 ~ Gem::Ext::BuildError: ERROR: Failed to build gem native extension. ----- mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again. ----- An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.mysqlクライアントがないというエラーみたいですね。
エラー文に書いている以下のコマンドを実行。
server.[user|myapp]$ sudo yum install mysql-develその後、bundle installしたら無事mysqlが入りました。
一旦、以上になります。
今後随時更新していきます。
- 投稿日:2020-03-01T20:20:27+09:00
【初心者のためのポートフォリオ作成】 Rails6 + MySQL + AWS + Capistrano + Circle CI ①アプリ作成〜githubへのpushまで
はじめに
未経験からのWEBエンジニアへの転職を目指し、railsでポートフォリオを作成しました。
今回はその復習を兼ねて、アプリ作成〜デプロイ、さらにCapistranoとCircle CIを使ったCI/CDまでの流れを記事にしたいと思います。アプリケーションの中身は一旦置いておいて、上記過程を把握することを目的としています。
ただ、それなりに詳しく書いていきたいと思うので、アプリケーションの作り込み以外の部分は、参考にしていただいて問題ないかと思います。
また、エラーが出れば都度参考記事とともに対応策も記述していきますので、これからポートフォリオ作成を始める初学者の方の参考になればと思います。
本記事は第1回目として、
rails newからgithubへのpushまでを説明していきます。使用技術
- Rails 6
- MySQL
- Rspec(テスト)
- Capistrano
- Circle CI
- AWS(VPC,EC2,ALB,RDS,S3,Route53,ACM)
アーキテクチャ
最終的には、以下のような構成をイメージしています。
(私のポートフォリオの構成図をそのまま転用していますが、今回ひとまずdockerには触れません。余力があればそちらもいずれ・・・)
アプリ作成(MySQL)
今回はデータベースにMySQLを使います。
とは言っても難しいことはなく、以下のようにrails new アプリ名 -d mysqlとすればOKです。
(MySQLを自分のPCにインストールする部分で苦戦した記憶がありますが、そこは一旦割愛させていただきます。)$ rails new test_app -d mysqlエラー発生
早速ですが、サーバー起動しちゃいます。
$ rails s => Booting Puma => Rails 6.0.2.1 application starting in development => Run `rails server --help` for more startup options Exiting Traceback (most recent call last): 77: from bin/rails:3:in `<main>' 76: from bin/rails:3:in `load' (省略) Webpacker configuration file not found /Users/ユーザー名/test_app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /Users/beppuyuusuke/test_app/config/webpacker.yml (RuntimeError)なにやらエラーが発生しました。
Please run rails webpacker:installとのことなので、$ rails webpacker:installが、、、またもやエラー・・・
sh: node: command not found sh: nodejs: command not found Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/そういえば、
rails newした時も、同じエラーメッセージが出てスルーしてました。Node.jsのインストール
Node.jsのインストールが必要とのことなので、以下の記事を参考にインストールを進めていきます。
https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09$ brew install nodebrew (省略) zsh completions have been installed to: /usr/local/share/zsh/site-functions ==> Summary ? /usr/local/Cellar/nodebrew/1.0.1: 8 files, 38.6KB, built in 7 seconds $ mkdir -p ~/.nodebrew/src #ディレクトリを作成 $ nodebrew install-binary stable #安定版をインストール Fetching: https://nodejs.org/dist/v12.16.1/node-v12.16.1-darwin-x64.tar.gz ######################################################################### 100.0% Installed successfully
Installed successfullyと出たので、インストールは成功したっぽいです。これだけではダメで、有効化の手順が必要なようです。
nodebrew lsでインストールされたバージョンを確認すると、$ nodebrew ls v12.16.1 current: none
current: none
つまり、無効な状態ということで、以下コマンドを実行して有効化します。$ nodebrew use v12.16.1 use v12.16.1改めて確認すると、
nodebrew ls v12.16.1 current: v12.16.1有効化されました。
最後に環境パスを通します。$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profileターミナルの再起動をして、再度
rails webpacker:installを実行します。$ rails webpacker:install Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/あれ?またエラー??
今度はYarnがインストールされてない、ですか・・・。Yarnのインストール
これまでRails5を使っていましたが、Rails6だとつまづくみたいです。
以下の記事を見つけたので、こちらを参考に(というか、そのまま真似して)対応していきます。
https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0$ brew install yarn #インストール ==> Installing dependencies for yarn: icu4c and node ==> Installing yarn dependency: icu4c (省略) ==> node Bash completion has been installed to: /usr/local/etc/bash_completion.d $ yarn -v #バージョン確認 1.22.0 $ yarn install yarn install v1.22.0 info No lockfile found. [1/4] ? Resolving packages... [2/4] ? Fetching packages... [3/4] ? Linking dependencies... [4/4] ? Building fresh packages... success Saved lockfile. ✨ Done in 0.91s.特に深く考えず、
brew install yarn→yarn -v→yarn install
を実行すればOKです。ようやく、rails webpacker:installを実行
$ rails webpacker:install create config/webpacker.yml Copying webpack core config create config/webpack create config/webpack/development.js create config/webpack/environment.j (省略) ✨ Done in 7.98s. Webpacker successfully installed ? ?クラッカーとケーキでお祝いされました。
ここまで長かった・・・(参考記事のコピペですけど)改めて rails sでサーバー起動
$ rails s => Booting Puma => Rails 6.0.2.1 application starting in development => Run `rails server --help` for more startup options Puma starting in single mode... * Version 4.3.3 (ruby 2.6.0-p0), codename: Mysterious Traveller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 * Listening on tcp://[::1]:3000 Use Ctrl-C to stop
http://localhost:3000/にアクセスしてみると
またエラーかい!
datebaseがないって言われてますね。
これはすっかり忘れてました。rails:db createでデータベース作成
一旦、
Ctr-Cでサーバーを停止して、データベースを作成→再度サーバーを起動します。$ rails db:create Created database 'test_app_development' Created database 'test_app_test' $ rails s => Booting Puma => Rails 6.0.2.1 application starting in development => Run `rails server --help` for more startup options Puma starting in single mode... * Version 4.3.3 (ruby 2.6.0-p0), codename: Mysterious Traveller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 * Listening on tcp://[::1]:3000 Use Ctrl-C to stopエラー続きで少し長くなりましたが、これでアプリケーション側の準備はOKです。
エラーが出た時は焦らず、はいはいって感じでエラーメッセージをコピペしてググればなんとかなります。
というか、学習を進めていくうちに自然とそうなっていくので、めげずに頑張りましょう!githubへのpush
さて、一息つきたいところですがもう少しです。
ここで一度、githubにpushしておきましょう。
https://github.com/私もまだまだ初学者なので個人的&漠然としたイメージですが、githubへのpush=セーブするみたいなことだと考えています。
railsチュートリアルでのその辺は解説されていたので、まだの方は一度ざっと学習することをお勧めします。
(私は基本コピペ&わからない部分はスルーして、約2週間で1回通ったきりです。)githubの活用は、後半のデプロイ以降の手順にも必須ですので、早めに使って慣れておきましょう。
新規リポジトリ作成
では、順番に説明していきます。
一旦ターミナルから離れて、ブラウザ上のgit hubページでの操作となります。ここでは割愛しますが、登録がまだの方は以下の記事が参考になるかと思います。
https://techacademy.jp/magazine/6235そのまま上記記事を参考にして進めていただいても結構ですが(そっちの方がわかりやすいかも)、リポジトリの作成から説明していきます。
こんな感じの画面ですが、とりあえず
Repository nameにお好みの名前を入力して、Create repositoryボタンを押します。
Repository nameはなんでもOKですが、混乱を避けるためにrails new時に指定したアプリ名を使うのが一般的です。早速pushする
Create repositoryボタンを押すと、以下のような画面に進みます。
...or create a new ...(省略)の手順に従い、ターミナルに戻って上から順番にコマンドを実行します。$ echo "# test_app" >> README.md $ git init Reinitialized existing Git repository in /Users/ユーザー名/test_app/.git/ $ git add README.me $ git commit -m "first commit" [master (root-commit) 02bc84e] first commit 1 file changed, 25 insertions(+) create mode 100644 README.md $ git remote add origin git@github.com:vppysk/test_app.git $ git push -u origin master Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 458 bytes | 458.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To github:vppysk/test_app.git * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.ブラウザに戻って確認すると、
first commitが反映され、READMEが表示されていますね。私の場合、すでに他アプリでgithubを使用していたためスムーズでしたが、初めての方だとgitのインストール等が必要になるかと思います。
一応参考記事を載せておきますが、そんなに難しいことはないかと。
https://qiita.com/folivora/items/763d06b26bafd573a456まとめ
さて、これで一通りの手順は完了して、アプリ開発の準備が整いました。
私と違うところでエラーが出ることもあるかと思いますが、慌てずエラーメッセージを読み、ググる習慣をつければ大丈夫です。
英語がわからない場合は、迷わずグーグル翻訳に頼りましょう。もちろん、コメントで質問していただいても結構ですので、頑張っていきましょう。
(上級者の方は逆にアドバイスいただけると嬉しいです)次回の第2回目は簡単な機能の実装と、Rspecを導入したテスト駆動開発(といっても初心者ですけど)について説明したいと思います。
それでは、またお会いしましょう!
- 投稿日:2020-03-01T20:20:27+09:00
【初心者のためのポートフォリオ作成】 Rails6 + MySQL + AWS + Capistrano + Circle CI ①アプリ作成〜サーバー起動まで
はじめに
未経験からのWEBエンジニアへの転職を目指し、railsでポートフォリオを作成しました。
今回はその復習を兼ねて、アプリ作成〜デプロイ、さらにCapistranoとCircle CIを使ったCI/CDまでの流れを記事にしたいと思います。アプリケーションの中身は一旦置いておいて、上記過程を把握することを目的としています。
ただ、それなりに詳しく書いていきたいと思うので、アプリケーションの作り込み以外の部分は、参考にしていただいて問題ないかと思います。
また、エラーが出れば都度参考記事とともに対応策も記述していきますので、これからポートフォリオ作成を始める初学者の方の参考になればと思います。
本記事は第1回目として、
rails newからサーバー起動までを説明していきます。使用技術
- Rails 6
- MySQL
- Rspec(テスト)
- Capistrano
- Circle CI
- AWS(VPC,EC2,ALB,RDS,S3,Route53,ACM)
アーキテクチャ
最終的には、以下のような構成をイメージしています。
(私のポートフォリオの構成図をそのまま転用していますが、今回ひとまずdockerには触れません。余力があればそちらもいずれ・・・)
アプリ作成(MySQL)
今回はデータベースにMySQLを使います。
とは言っても難しいことはなく、以下のようにrails new アプリ名 -d mysqlとすればOKです。
(MySQLを自分のPCにインストールする部分で苦戦した記憶がありますが、そこは一旦割愛させていただきます。)$ rails new test_app -d mysqlエラー発生
早速ですが、サーバー起動しちゃいます。
$ rails s => Booting Puma => Rails 6.0.2.1 application starting in development => Run `rails server --help` for more startup options Exiting Traceback (most recent call last): 77: from bin/rails:3:in `<main>' 76: from bin/rails:3:in `load' (省略) Webpacker configuration file not found /Users/XXXXX/test_app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /Users/beppuyuusuke/test_app/config/webpacker.yml (RuntimeError)なにやらエラーが発生しました。
Please run rails webpacker:installとのことなので、$ rails webpacker:installが、、、またもやエラー・・・
sh: node: command not found sh: nodejs: command not found Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/そういえば、
rails newした時も、同じエラーメッセージが出てスルーしてました。Node.jsのインストール
Node.jsのインストールが必要とのことなので、以下の記事を参考にインストールを進めていきます。
https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09$ brew install nodebrew (省略) zsh completions have been installed to: /usr/local/share/zsh/site-functions ==> Summary ? /usr/local/Cellar/nodebrew/1.0.1: 8 files, 38.6KB, built in 7 seconds $ mkdir -p ~/.nodebrew/src #ディレクトリを作成 $ nodebrew install-binary stable #安定版をインストール Fetching: https://nodejs.org/dist/v12.16.1/node-v12.16.1-darwin-x64.tar.gz ######################################################################### 100.0% Installed successfully
Installed successfullyと出たので、インストールは成功したっぽいです。これだけではダメで、有効化の手順が必要なようです。
nodebrew lsでインストールされたバージョンを確認すると、$ nodebrew ls v12.16.1 current: none
current: none
つまり、無効な状態ということで、以下コマンドを実行して有効化します。$ nodebrew use v12.16.1 use v12.16.1改めて確認すると、
nodebrew ls v12.16.1 current: v12.16.1有効化されました。
最後に環境パスを通します。$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profileターミナルの再起動をして、再度
rails webpacker:installを実行します。$ rails webpacker:install Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/あれ?またエラー??
今度はYarnがインストールされてない、ですか・・・。Yarnのインストール
これまでRails5を使っていましたが、Rails6だとつまづくみたいです。
以下の記事を見つけたので、こちらを参考に(というか、そのまま真似して)対応していきます。
https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0$ brew install yarn #インストール ==> Installing dependencies for yarn: icu4c and node ==> Installing yarn dependency: icu4c (省略) ==> node Bash completion has been installed to: /usr/local/etc/bash_completion.d $ yarn -v #バージョン確認 1.22.0 $ yarn install yarn install v1.22.0 info No lockfile found. [1/4] ? Resolving packages... [2/4] ? Fetching packages... [3/4] ? Linking dependencies... [4/4] ? Building fresh packages... success Saved lockfile. ✨ Done in 0.91s.特に深く考えず、
brew install yarn→yarn -v→yarn install
を実行すればOKです。ようやく、rails webpacker:installを実行
$ rails webpacker:install create config/webpacker.yml Copying webpack core config create config/webpack create config/webpack/development.js create config/webpack/environment.j (省略) ✨ Done in 7.98s. Webpacker successfully installed ? ?クラッカーとケーキでお祝いされました。
ここまで長かった・・・(参考記事のコピペですけど)改めて rails sでサーバー起動
$ rails s => Booting Puma => Rails 6.0.2.1 application starting in development => Run `rails server --help` for more startup options Puma starting in single mode... * Version 4.3.3 (ruby 2.6.0-p0), codename: Mysterious Traveller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 * Listening on tcp://[::1]:3000 Use Ctrl-C to stop
http://localhost:3000/にアクセスしてみると
またエラーかい!
datebaseがないって言われてますね。
これはすっかり忘れてました。rails:db createでデータベース作成
一旦、
Ctr-Cでサーバーを停止して、データベースを作成→再度サーバーを起動します。$ rails db:create Created database 'test_app_development' Created database 'test_app_test' $ rails s => Booting Puma => Rails 6.0.2.1 application starting in development => Run `rails server --help` for more startup options Puma starting in single mode... * Version 4.3.3 (ruby 2.6.0-p0), codename: Mysterious Traveller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 * Listening on tcp://[::1]:3000 Use Ctrl-C to stopお疲れ様でした!
エラー続きで少し長くなりましたが、これでアプリケーションを作る準備が整いました。エラーが出た時は焦らず、はいはいって感じでエラーメッセージをコピペしてググればなんとかなります。
というか、学習を進めていくうちに自然とそうなっていくので、めげずに頑張りましょう!次回も基本的な内容ですが、githubへのpushを解説していきたいと思います。
- 投稿日:2020-03-01T19:49:35+09:00
RailsにMySQLを導入する
Railsアプリを作っていて、DBは何にしよう?
MySQLかな(使い慣れているし)と思い、導入することにしました。MySQLのインストール
Homebrewを使ってインストールします
$ brew update $ brew install mysqlバージョン確認(接続前)$ mysql --version mysql Ver 8.0.19 for osx10.14 on x86_64 (Homebrew)バージョン確認(接続後)mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.19 | +-----------+ 1 row in set (0.00 sec)MySQL起動
インストールが成功したら起動してみましょう
MySQL起動、接続$ mysql.server start $ mysql -u rootセキュリティ設定
接続できたらセキュリティ設定を行います
セキュリティ設定$ mysql_secure_installation下記4つの項目を聞かれます。
1.rootのパスワードの変更
まずは、rootユーザーのパシワード変更です。
パスワードの変更VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: yパスワードの強度は3種類あるようです。
パスワードの変更There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2・LOW:8文字以上
・MEDIUM:8文字以上 + 数字・アルファベットの大文字と小文字・特殊文字を含む
・STRONG:8文字以上 + 数字・アルファベットの大文字と小文字・特殊文字を含む + 辞書ファイルでのチェックご自身にあったものを選んで変更してください
2.匿名ユーザの削除
匿名ユーザーを削除するか聞かれるので、削除します
anonymousユーザーの削除By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y3.リモートからのrootユーザでのログイン禁止
リモートから root ユーザでログインできるかの設定を求められます。
yを入力してログインできないようにします。リモートからのrootユーザでのログイン禁止By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y4.testデータベースの削除
最後にデフォルトで作成されている
testという名前のデータベースを削除するか聞かれるので、yを入力します。リモートからのrootユーザでのログイン禁止By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : yこれで、データベースと権限が削除されます。
ここまでで、セキュリティ設定が完了しました。MySQLへ接続し新しいユーザーの作成
基本的にローカル開発でrootユーザーは使いたくないので、新しいユーザーを作成します。
先ほど設定した新しいrootユーザーのパスワードでログインし、作成します。ユーザー作成mysql> create user 'local-user'@'localhost' identified by '○○○○○○(設定したいパスワード)'; Query OK, 0 rows affected (0.06 sec)ユーザー確認mysql> select User,Host from mysql.user; +------------------+-----------+ | User | Host | +------------------+-----------+ | local-user | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+ 5 rows in set (0.00 sec)権限設定mysql> grant all on *.* to 'local-user'@'localhost'; Query OK, 0 rows affected (0.06 sec)Railsに導入
ここまでMySQLの設定が完了したら、Railsで使えるように設定します。
新規で作る場合は、下記コマンドでMySQLを使うように設定できます。プロジェクト作成$ rails new アプリケーション名 --database=mysql
config/database.ymlを確認すると以下のようになっています。database.ymldefault: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: host: localhost development: <<: *default database: アプリケーション名_development test: <<: *default database: アプリケーション名_test production: <<: *default database: アプリケーション名_production username: アプリケーション名 password: <%= ENV['アプリケーション名_DATABASE_PASSWORD'] %>そして、
GemFileを修正します。(既存プロジェクトに組み込む場合はここからです)
下記を追加、もしくはsqlLiteがある場合はそれを削除してください。GemFilegem mysql2
bundle installを実行します。database.ymldevelopment: adapter: mysql2 encoding: utf8 database: <%= ENV['DATABASE_NAME'] %> pool: 5 username: <%= ENV['DATABASE_USER'] %> password: <%= ENV['DATABASE_PASSWORD'] %> host: <%= ENV['DATABASE_HOST'] %>上記のように環境変数を使えるようになるので、パスワード等が外部に漏れずにすみます。
環境変数は
.envファイルを作成し、記入します。
※.envファイルは.ignoreに設定しないと公開する可能性があるので注意してください!.env作成vi .env.envDATABASE_PASSWORD = '設定したパスワードを記入' DATABASE_USER = '作成したMySQLユーザー名を記入' DATABASE_HOST = 'localhostなど(MySQLのユーザーを確認)'ここまで完了したら、
$ rails db:createでDBを作成します。
完了したら、MySQLが使えるようになっているはずです。【補足】
Sequel Proを使いたい場合は、下記コマンドでインストールできます。
Sequel ProとはDBを管理するGUIツールです。SequelProのインストール$ brew cask install sequel-proまた、
Sequel Proでログインできない場合があります。
下記のようなエラーが発生したら、認証プラグインを変更してください。
Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/lib/plugin/caching_sha2_password.so, 2): image not foundpluginの確認mysql> SELECT host, user, plugin FROM mysql.user; +-----------+------------------+-----------------------+ | host | user | plugin | +-----------+------------------+-----------------------+ | localhost | local-user | caching_sha2_password | +-----------+------------------+-----------------------+ 5 rows in set (0.03 sec)認証プラグインの変更mysql> ALTER USER 'local-user'@"localhost" IDENTIFIED WITH mysql_native_password BY '{password}';公式によると、MySQL8.0からデフォルトの認証プラグインが
caching_sha2_passwordに変更されたようです。(以前はmysql_native_password)ただ、
Sequel Pro等のツールはまだ新しい認証プラグインに対応していない場合があるようです。
なので、mysql_native_passwordに戻す必要があるようです。参照
- 投稿日:2020-03-01T16:24:39+09:00
SQLで、指定した文字を最初と最後にもつ要素の取得方法
タイトルのような条件の要素を抽出する必要がある際に、わからなかったため、備忘用に記録。
使用する命令は3つ。
1つ目は、LEFT。
LEFT ( 文字列 , 整数 )上記のように指定することで、文字列の左から整数番目までを取得することができる。
2つ目はRIGHT。
RIGHT ( 文字列 , 整数 )これはLEFTの逆で、文字列の右から整数番目までの文字を取得できる。
そして3つ目が IN。
SELECT * FROM fruit WHERE name IN("みかん","りんご");例えば上記のように使うことで、fruitテーブルの中からnameが「みかん」か「りんご」の要素を取得することができる。
これらを組み合わせることで、タイトルの
「指定した文字を最初と最後にもつ要素の取得」
が可能になる。具体的には、
aから始まり、aで終わる市を抽出する必要がある場合、SELECT city FROM テーブル名 WHERE LEFT(city,1) IN ('a') and RIGHT(city, 1) IN ('a');上記のように指定することで抽出することが可能。
もちろん例えば、a以外にiも含めて抽出したい場合、 IN ( ' a ' , ' i ' ) として続けることで指定できる。
- 投稿日:2020-03-01T13:00:40+09:00
ターミナルにて本番環境MySQLの確認
本番環境にてMySQLの中身をたびたび確認することがあったのでメモ
MySQLの確認
本番環境ターミナルにて
mysqld -u root -pDB一覧
> show databases;DBを選択(成功すれば→Database changed)
> use データベース名;以降、DBを選択した状態で実行する
DBのテーブルを確認
> show tables;テーブルの構造を確認
> describe テーブル名;テーブルの中身を確認
> select * from テーブル名;外部キー制約を無効にする
> set foreign_key_checks = 0;外部キー制約を有効にする
> set foreign_key_checks = 1;











