telnetでGETとPOSTでHTTPリクエストを送る方法

この記事では、クライアントからtelnetを使ってGETメソッドとPOSTメソッドでWebサーバにHTTPリクエストを送信する方法を紹介します。 HTTPは、Webサーバ(サーバ)⇄Webブラウザ(クライアント)間のWebページの送受信に使われるプロトコルです。 1. 環境 macOS Monterey:12.4 2. 手順 2-1. telnetのインストール $ brew install telnet 2-2. GETメソッド 以下のコマンドで、example.comの80番ポート(HTTP)に接続 $ telnet example.com 80 書式:telnet <ホスト名> <ポート番号> 続けて、以下のHTTPリクエストを実行 GET / HTTP/1.1 # リクエスト行 Host: example.com # ヘッダ <改行> リクエスト行 メソッド:GETメソッド、リクエストURI:/、プロトコルバージョン:HTTP/1.1 ヘッダ フィールド名:Host、フィールド値:example.com Host→HTTP/1.1 で唯一の必須ヘッダ。フィールド値にURLのホスト部分を指定。 <改行> 1行空けることでヘッダの終わりを伝える 2-3. POSTメソッド xxx.com/articlesに以下のようなフォームがある場合を想定 <form action="/articles" method="post"> <div> <label for="article_title">Title</label> <input type="text" name="article[title]" id="article_title"> </div> <div> <label for="article_body">Body</label> <textarea type="text" name="article[body]" id="article_body"></textarea> </div> <div> <input type="submit" name="commit" value="Submit" data-disable-with="Submit"> </div> </form> 以下のコマンドで、xxx.comの80番ポート(HTTP)に接続 ...

6月 5, 2022

【Debian】Nginxで自分で作ったhtmlファイルを表示させる方法

この記事では、Nginx上に自分で作ったhtmlファイルを配置し、ブラウザから表示させる方法を紹介します。 1. 環境 Debian 11 bullseye nginx 1.21.6 2. 手順 2-1. Nginxのインストール Nginxをインストール $ sudo apt update $ sudo apt install nginx Nginxのインストールを確認 $ /usr/sbin/nginx -v nginx version: nginx/1.21.6 2-2. Nginxの起動 Nignxを起動 $ sudo systemctl start nginx Nginxの起動を確認 $ systemctl status nginx ● nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-06-05 06:38:04 JST; 1h 45min ago Docs: https://nginx.org/en/docs/ Process: 8247 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 8248 (nginx) Tasks: 2 (limit: 529) Memory: 1.7M CPU: 10ms CGroup: /system.slice/nginx.service ├─8248 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf └─8250 nginx: worker process 2-3. 設定ファイルの確認 Nginxの設定ファイルを確認 ...

6月 5, 2022

【Debian 11 bullseye】sudoコマンドをインストールする方法

本稿では、さくらVPSにインストールしたDebian 11にsudoコマンドをインストールする方法を紹介します。 sudoは一般ユーザにスーパーユーザ(root)の権限を与えるコマンドです。 なお、さくらVPSにDebian 11をインストール方法は以下をご参照ください。 さくらのVPSにDebian11 (bullseye)をインストールする方法 | あまブログ 1. sudoのインストール sudoコマンドをインストールします。 # apt install -y sudo 2. /etc/sudoersの編集 sudoコマンドの設定ファイルである/etc/sudoersを編集して、権限の設定を行います。 /etc/sudoersは直接テキストエディタで開いて編集してはいけません。 書き方を誤るとsudoが動作せずに、どのユーザもsudoが使えなくなってしまうことがあるためです。 /etc/sudoersの編集はvisudoコマンドを使用します。 # visudo visudoコマンドを実行したら、/etc/sudoersに以下を追記します。 foo ALL=(ALL) ALL 書式:<ユーザ> <マシン名>=(<権限>) <コマンド> (<権限>)のところを(<ALL:ALL>)と書いた場合、左側がユーザ、右側がグループを表す。 ファイルを保存し、設定したユーザでsudoコマンドが実行できれば設定は完了です。 【参考】 【Debian 8 Jessie】sudoコマンドをインストールする #Linux - Qiita sudoers覚え書き #sudo - Qiita sudoersを変更する、よく使う設定例 - それマグで! 新しいLinuxの教科書 9章 03 スーパーユーザ

6月 1, 2022

さくらのVPSにDebian11 (bullseye)をインストールする方法

さくらのVPSにDebian11をインストールする手順を解説します。 サーバーを契約し、OSをインストールして、ユーザーを作成してログインします。 1. 手順 以下の手順で進めていきます。 さくらのVPSでサーバーを契約 Debian11のインストール Debian11の設定 Debian11にログイン 1-1. さくらのVPSでサーバーを契約 以下にアクセスし、「お申し込み」を選択 VPS(仮想専用サーバー)|さくらインターネット サーバー作成 サーバー選択 ゾーン:石狩第一 プラン:512MB(学習には最小プランで十分) ストレージ変更オプション:SSD25GB 購入台数:1台 支払いパターン:毎月払い サーバー設定 サーバー名:任意 サーバー説明:任意 OS設定 インストールするOS:どれでも(後で入れ直すため) OSバージョン:どれでも(後で入れ直すため) スタートアップスクリプト:利用しない サーバーへのSSHキー登録:登録しない(後で入れ直すため) 支払い方法 初回は2ヶ月分の支払い 支払い完了後に以下の画面が表示され、数分後にサーバーが作成されます。 1-2. Debian11のインストール さくらのVPSにログインして、コントロールパネルのサーバー一覧から作成したサーバーを選択 「OS再インストール」を選択し、OSインストール形式は「カスタムOS」、インストールOSは「Debian 11 amd64」を選択して「内容確認」をクリック インストールOSが「Debian 11 amd64」になっていることを確認して、「OS再インストール」をクリック 1-3. Debian11の設定 作成したサーバーを選択し、「コンソール」>「VNCコンソール」を選択してVNCコンソールを起動 1-3-1. rootユーザーの設定 rootユーザーのパスワードを設定して、「Continue」を選択 設定したパスワードを再度入力して、「Continue」を選択 1-3-2. 一般ユーザーの設定 ユーザーのフルネームの設定は特に必要ないので何も入力せず、「Continue」を選択 一般ユーザーのユーザー名を設定して、「Continue」を選択 一般ユーザーのパスワードを設定して、「Continue」を選択 設定したパスワードを再度入力して、「Continue」を選択 1-3-3. パーティションの設定 「Guided – use entire disk」を選択 「Virtual disk 1 (vda)」を選択 ...

6月 1, 2022

【Git】リモート追跡ブランチと上流ブランチを理解する【fetch・merge】

1. リモート追跡ブランチ、上流ブランチ リモート追跡ブランチ(remote-tracking branch) リモートブランチの状態を追跡するブランチ ローカルリポジトリに存在する(実体は.git/refs/remotes/) 上流ブランチ(upstream branch) デフォルトでマージの対象となるブランチ(引数なしでgit mergeした時にマージされるブランチ) mainブランチの上流ブランチがorigin/mainブランチである場合、「mainブランチはorigin/mainブランチを追跡している」と言う 2. fetch、merge、(pull) fetch:リモートリポジトリのmainブランチをローカルリポジトリのorigin/mainブランチに反映 merge:ローカルリポジトリのorigin/mainブランチをローカルリポジトリのmainブランチにマージ pull = fetch + merge git pull origin main = git fetch origin + git merge origin/main 3. 関連コマンド 3-1. 上流ブランチの設定 上流ブランチの設定(git-branch -u) # git branch -u <リモート追跡ブランチ> <ローカルブランチ> git branch -u origin/main main push時に上流ブランチを設定(git-push -u) # mainブランチの上流ブランチにorigin/mainブランチが設定される git push -u origin main 上流ブランチの設定を解除(git-branch –unset-upstream) # git branch --unset-upstream <ローカルブランチ> git branch --unset-upstream main 3-2. ブランチの確認 ローカルブランチとリモート追跡ブランチの表示(git-branch -a) ...

5月 30, 2022

【apt install】Debian公式リポジトリに登録されていないパッケージをインストールする方法

本稿では、aptコマンドを使ってDebianの標準以外のパッケージをインストールする方法を紹介します。 1. はじめに Debianにパッケージをインストールする時には、aptコマンドを使うことが多いと思います。 デフォルトの状態ではDebianの公式リポジトリのみが/etc/apt/sources.listに設定されています。 そのため、サードパーティ製のパッケージ(Debianの公式リポジトリに登録されていないパッケージ)をインストールするためには、そのパッケージが格納されてるリポジトリを/etc/apt/sources.listに追加する必要があります。 今回は、以下の記事を参考にiozone3のインストールを例に手順を解説します。 apt-getで見つからないパッケージを追加する方法(debian, ubuntu両方対応) 2. 実行環境 Debian GNU/Linux 11 (bullseye) 3. 手順 3-1.パッケージディレクトリを検索 以下のサイトから、インストールしたいパッケージが存在するリポジトリを検索します。 Debian – パッケージ 「キーワード」にiozone3と入力して「検索」。 iozone3はnon-freeリポジトリにあることがわかる。 3-2.リポジトリを追加 /etc/apt/sources.listにnon-freeリポジトリを追加します。 今回はリポジトリの追加にapt-add-repositoryコマンドを使用します(sources.listを自分で直接編集する方法もある)。 apt-add-repositoryコマンドを使用するにはsoftware-properties-commonパッケージが必要です。 以下のコマンドを実行して、software-properties-commonパッケージをインストールします。 $ apt install -y software-properties-common ※上記コマンドの-yオプションについて、以下apt-getのmanpageより抜粋 -y, –yes, –assume-yes Automatic yes to prompts; assume “yes” as answer to all prompts and run non-interactively. If an undesirable situation, such as changing a held package, trying to install an unauthenticated package or removing an essential package occurs then apt-get will abort. ...

5月 19, 2022

【Linux】SSH公開鍵認証方式の設定手順

1. はじめに 本稿では、クライアントからSSHでLinuxサーバーに接続する手順を解説します。 リモートのサーバーにローカルPCのSSHクライアントで公開鍵認証方式を使ってログインできるようにします。 2. 実行環境 【SSHクライアント】macOS Monterey:12.3.1 【SSHサーバー】Debian GNU/Linux 11 (bullseye) 3. 手順 以下の手順で進めていきます。 SSHのインストール パスワード認証方式での設定 公開鍵認証方式での設定 セキュリティ設定 追加設定 3-1. SSHのインストール サーバー側で以下のコマンドを実行して、OpenSSHをインストールします。 # apt install -y ssh 3-2. パスワード認証方式での設定 公開鍵認証方式の設定を行うために、一時的にパスワード認証方式でログインできるように設定します。 サーバー側で以下のコマンドを実行して、設定ファイル(/etc/ssh/sshd_config)のバックアップを取ります。 # cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bk /etc/ssh/sshd_configのパスワード認証の項目を以下に変更します。 PasswordAuthentication yes ※その他の項目は後で設定します。 SSHサーバーを再起動して設定を反映させます。 # systemctl restart ssh クライアント側で以下のコマンドを実行して、パスワード認証方式でSSHサーバーにログインできることを確認します。 $ ssh <ユーザ名>@<SSHサーバーのIPアドレス> 3-3. 公開鍵認証方式での設定 次に公開鍵認証方式の設定を行います。 3-3-1. キーペアの生成 クライアント側で以下のコマンドを実行して、公開鍵と秘密鍵のキーペアを作成します。 $ ssh-keygen -t ed25519 公開鍵:~/.ssh/id_ed25519.pub 秘密鍵:~/.ssh/id_ed25519 ※秘密鍵は絶対に流出させてはいけません。 3-3-2. 公開鍵の登録 次に、サーバー側に公開鍵を登録します。 ssh-copy-idを使って公開鍵の登録を行います。 クライアント側で以下のコマンドを実行し、ssh-copy-idをインストールします。 $ brew install ssh-copy-id クライアント側で以下のコマンドを実行し、サーバー側に公開鍵を登録します。 $ ssh-copy-id -i ~/.ssh/id_ed25519.pub <ユーザ名>@<SSHサーバーのIPアドレス> ssh-copy-idコマンドがやってくれたことを手動で行う場合は、以下のようになります。 ...

5月 19, 2022

【Rails/MySQL】RailsでMySQLを使う方法

1. はじめに Railsではデフォルトのデータベースにsqlite3を使用しています。 今回はRailsアプリケーションのデータベースでMySQLを使用する方法を紹介します。 2. 開発環境 macOS Monterey:12.3.1 Ruby:3.1.0 Bundler:2.3.12 Ruby on Rails:6.1.5 MySQL:8.0.28 3. 手順 3-1. MySQLのインストールとセキュリティ設定 まずは、MySQLのインストールとセキュリティの設定を行います。 MySQLをHomebrewでインストールしてセキュリティ設定を行う | あまブログ 3-2. MySQLのユーザー作成 次にMySQLの開発用ユーザーを作成します。 rootユーザーでログインします。 $ mysql -u root -p ユーザーの作成します。 mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; MySQL 8.0 リファレンスマニュアル_CREATE USER ステートメント ユーザーが作成されたことを確認します。 mysql> SELECT User,Host FROM mysql.user; +------------------+-----------+ | User | Host | +------------------+-----------+ | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | newuser | localhost | +------------------+-----------+ 5 rows in set (0.00 sec) 権限の付与します。 ...

5月 8, 2022

【Rails/MySQL】bundle installでgem mysql2がインストールできない時の解決法

1. 開発環境 macOS Monterey:12.3.1 Ruby:3.1.0 Ruby on Rails:6.1.5 Bundler:2.3.12 MySQL:8.0.28(Homebrew3.4.10でインストール) 2. エラー時の状況 RailsでMySQLを使うためにrails new <app> -d mysqlを実行 bundle installの所でエラーが発生(mysql2のインストールに失敗していた) 3. エラーログ $ rails new <appname> -d mysql 省略 run bundle install Fetching gem metadata from https://rubygems.org/........... Resolving dependencies.... 省略 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/mysql2-0.5.3/ext/mysql2 /Users/kazunoko/.rbenv/versions/3.1.0/bin/ruby -I /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0 -r ./siteconf20220503-1924-xwtu0t.rb extconf.rb checking for rb_absint_size()... yes checking for rb_absint_singlebit_p()... yes checking for rb_wait_for_single_fd()... yes ----- Using mysql_config at /usr/local/bin/mysql_config ----- checking for mysql.h... yes checking for errmsg.h... yes checking for SSL_MODE_DISABLED in mysql.h... yes checking for SSL_MODE_PREFERRED in mysql.h... yes checking for SSL_MODE_REQUIRED in mysql.h... yes checking for SSL_MODE_VERIFY_CA in mysql.h... yes checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes checking for MYSQL.net.vio in mysql.h... yes checking for MYSQL.net.pvio in mysql.h... no checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes checking for SERVER_QUERY_NO_GOOD_INDEX_USED in mysql.h... yes checking for SERVER_QUERY_NO_INDEX_USED in mysql.h... yes checking for SERVER_QUERY_WAS_SLOW in mysql.h... yes checking for MYSQL_OPTION_MULTI_STATEMENTS_ON in mysql.h... yes checking for MYSQL_OPTION_MULTI_STATEMENTS_OFF in mysql.h... yes checking for my_bool in mysql.h... no ----- Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load ----- ----- Setting libpath to /usr/local/Cellar/mysql/8.0.28_1/lib ----- creating Makefile current directory: /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/mysql2-0.5.3/ext/mysql2 make DESTDIR\= clean current directory: /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/mysql2-0.5.3/ext/mysql2 make DESTDIR\= compiling client.c client.c:178:24: warning: 'rbimpl_tainted_str_new_cstr' is deprecated: taintedness turned out to be a wrong idea. [-Wdeprecated-declarations] VALUE rb_sql_state = rb_tainted_str_new2(mysql_sqlstate(wrapper->client)); ^ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/intern/string.h:1742:29: note: expanded from macro 'rb_tainted_str_new2' #define rb_tainted_str_new2 rb_tainted_str_new_cstr /**< @old{rb_tainted_str_new_cstr} */ ^ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/intern/string.h:1615:7: note: expanded from macro 'rb_tainted_str_new_cstr' rbimpl_tainted_str_new_cstr : \ ^ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/intern/string.h:1401:1: note: 'rbimpl_tainted_str_new_cstr' has been explicitly marked deprecated here RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) ^ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/attr/deprecated.h:36:53: note: expanded from macro 'RBIMPL_ATTR_DEPRECATED' # define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg)) ^ client.c:787:14: warning: incompatible pointer types passing 'VALUE (void *)' (aka 'unsigned long (void *)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-pointer-types] rb_rescue2(do_send_query, (VALUE)&args, disconnect_and_raise, self, rb_eException, (VALUE)0); ^~~~~~~~~~~~~ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/iterator.h:388:26: note: passing argument to parameter 'b_proc' here VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...); ^ client.c:795:16: warning: incompatible pointer types passing 'VALUE (void *)' (aka 'unsigned long (void *)') to parameter of type 'VALUE (*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-pointer-types] rb_rescue2(do_query, (VALUE)&async_args, disconnect_and_raise, self, rb_eException, (VALUE)0); ^~~~~~~~ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/iterator.h:388:26: note: passing argument to parameter 'b_proc' here VALUE rb_rescue2(VALUE (*b_proc)(VALUE), VALUE data1, VALUE (*r_proc)(VALUE, VALUE), VALUE data2, ...); ^ 3 warnings generated. compiling infile.c compiling mysql2_ext.c compiling result.c compiling statement.c statement.c:49:24: warning: 'rbimpl_tainted_str_new_cstr' is deprecated: taintedness turned out to be a wrong idea. [-Wdeprecated-declarations] VALUE rb_sql_state = rb_tainted_str_new2(mysql_stmt_sqlstate(stmt_wrapper->stmt)); ^ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/intern/string.h:1742:29: note: expanded from macro 'rb_tainted_str_new2' #define rb_tainted_str_new2 rb_tainted_str_new_cstr /**< @old{rb_tainted_str_new_cstr} */ ^ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/intern/string.h:1615:7: note: expanded from macro 'rb_tainted_str_new_cstr' rbimpl_tainted_str_new_cstr : \ ^ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/intern/string.h:1401:1: note: 'rbimpl_tainted_str_new_cstr' has been explicitly marked deprecated here RBIMPL_ATTR_DEPRECATED(("taintedness turned out to be a wrong idea.")) ^ /Users/kazunoko/.rbenv/versions/3.1.0/include/ruby-3.1.0/ruby/internal/attr/deprecated.h:36:53: note: expanded from macro 'RBIMPL_ATTR_DEPRECATED' # define RBIMPL_ATTR_DEPRECATED(msg) __attribute__((__deprecated__ msg)) ^ 1 warning generated. linking shared-object mysql2/mysql2.bundle ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [mysql2.bundle] Error 1 make failed, exit code 2 Gem files will remain installed in /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/mysql2-0.5.3 for inspection. Results logged to /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/extensions/x86_64-darwin-21/3.1.0/mysql2-0.5.3/gem_make.out /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/builder.rb:95:in `run' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/builder.rb:44:in `block in make' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/builder.rb:36:in `each' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/builder.rb:36:in `make' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/ext_conf_builder.rb:63:in `block in build' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/tempfile.rb:317:in `open' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/ext_conf_builder.rb:26:in `build' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/builder.rb:161:in `build_extension' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/builder.rb:195:in `block in build_extensions' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/builder.rb:192:in `each' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/ext/builder.rb:192:in `build_extensions' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/installer.rb:847:in `build_extensions' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/rubygems_gem_installer.rb:71:in `build_extensions' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/rubygems_gem_installer.rb:28:in `install' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/source/rubygems.rb:204:in `install' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/installer/gem_installer.rb:54:in `install' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/installer/gem_installer.rb:16:in `install_from_spec' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/installer/parallel_installer.rb:186:in `do_install' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/installer/parallel_installer.rb:177:in `block in worker_pool' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/worker.rb:62:in `apply_func' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/worker.rb:57:in `block in process_queue' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/worker.rb:54:in `loop' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/worker.rb:54:in `process_queue' /Users/kazunoko/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/worker.rb:91:in `block (2 levels) in create_threads' An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue. In Gemfile: mysql2 run bundle binstubs bundler Could not find gem 'mysql2 (~> 0.5)' in locally installed gems. rails webpacker:install Could not find gem 'mysql2 (~> 0.5)' in locally installed gems. Run `bundle install` to install missing gems. 4. エラーの原因と思しき箇所 ld: library not found for -lssl opensslのパスが見つからないと言っている gemのmysql2はopensslが必須であり、bundleのビルド時にopensslのパスを設定する必要がある macに標準でopenssl入ってなかったっけ? mac OS High SierraからデフォルトのOpenSSLがLibreSSLに変わった 5. 解決法 bundle configでbundlerの設定ファイルにopensslのパスを設定して、bundle installで再度mysql2をインストールする ...

5月 7, 2022

【Rails/MySQL】dotenv-railsを使ってデータベースの認証情報を環境変数で管理する

RailsにMySQLを導入する際に、パスワードをdatabase.ymlに直接書くのはいかがなものかと思い、他の方法を調べた結果、dotenv-railsを使って認証情報を環境変数で管理できることがわかりました。 今回は作成済みのRailsアプリケーションにdotenv-railsを導入する手順を紹介します。 1. 開発環境 macOS Monterey:12.3.1 Ruby:3.1.0 Ruby on Rails:6.1.5 dotenv-rails:2.7.6 MySQL:8.0.28 2. dotenv-railsとは 認証情報などを環境変数で管理するためのgem 起動時にプロジェクトのルートディレクトリにある.envを読み込み、環境変数ENVに設定する dotenv-rails公式レポジトリ 3. 手順 3-1. dotenv-railsのインストール Gemfileに以下を追記します。 gem 'dotenv-rails' dotenv-railsをインストールします。 $ bundle install 3-2. database.ymlの修正 database.ymlを以下のように修正します。 default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV['DATABASE_DEFAULT_USER'] %> password: <%= ENV['DATABASE_DEFAULT_PASSWORD'] %> host: <%= ENV['DATABASE_DEFAULT_HOST'] %> socket: /tmp/mysql.sock development: <<: *default database: <%= ENV['DATABASE_DEV_NAME'] %> test: <<: *default database: <%= ENV['DATABASE_TEST_NAME'] %> <<: *defaultで一番上のdefaultの設定が呼び出されています。 こうやって書いたのと同じ↓ development: adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV['DATABASE_DEFAULT_USER'] %> password: <%= ENV['DATABASE_DEFAULT_PASSWORD'] %> host: <%= ENV['DATABASE_DEFAULT_HOST'] %> socket: /tmp/mysql.sock database: <%= ENV['DATABASE_DEV_NAME'] %> 3-3. .envの作成 アプリケーションのルートディレクトリ配下に、.envを作成します。 ...

5月 5, 2022