20200401のMySQLに関する記事は6件です。

テーブルを作成するSQL文

今回は、ターミナルでテーブルを作成していきたいと思います!

どういう風に作成するのか、以下のSQL文を見てみましょう^^

CREATE TABLE テーブル名 (カラム名 カラム名の型, ……);

Railsでテーブルを作成するときは、rails g model モデル名でテーブルに紐付けるモデルを作成
して、その時に作成されたマイグレーションファイルをrake db:migrateで実行!という順序でやってきました

このrake db:migrateが実行される裏では、このCREATE TABLEというSQL文が動いていたのです!

それでは、実際にテーブルを作成していきましょう!
と、その前にMySQLでの数字型や文字列型の定義方法を確認しておきましょう^^

Railsでは、数字を入れる型には"Integer"、文字列を入れる型には"String"が使われていました

MySQLではそれらを以下のように定義します

型名 保存できる値
INT 数字
VARCHAR(M) 最大M文字の文字列

これらを使い、"INT"型のカラム"id"と、"VARCHAR(250)"型のカラム"subject"のある"lessons"テーブルを作成してみましょう!

CREATE TABLE lessons (id INT, subject VARCHAR(250));

以下のように表示されれば、SQLは正しく実行されています^^

mysql> create table lessons (id int, subject varchar(250));
Query OK, 0 rows affected (0.17 sec)

mysql>  

下の画像のように、SHOW TABLES;で"lessons"テーブルが確認できれば、テーブルが正しく作成れたことが確認できます!
スクリーンショット 2020-04-01 23.26.55.png

本日はここまで!お疲れ様でした^^

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

carrierwave+rails6でTypeError (no implicit conversion of nil into String)エラーが発生したときの対処方法

執筆背景

carrierwave+rails6で画像と音声の複数アップロード機能を実装して試しに動作チェックしたところ、no implicit conversion of nil into Stringエラーが発生し、アップロードできなくなる事案が発生した。

今回はこれについての対処方法について執筆していきたいと思う。
なお、今回使用しているrailsのバージョンは6.0.2.2です。

結論

このエラーは、アップローダーのfilenameメソッドが正しく機能しないときに起こるエラーです。
filenameメソッドが正しく機能しない原因としては、

・ ファイルが正しく添付されていない
・ 読み込まれていない

などが挙げられます。

対処方法としては、

filenameメソッドの中身の後ろに
if original_filename.present?
を追記することでファイルの存在が確認できる場合にのみfileメソッドの中身が動作するように設定する

ことで解決できました。

image_uploader.rb
def filename
super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
end

作業内容

現在以下の画像のようなアップロード機能をcarrierwave+rails6で実装している。
スクリーンショット 2020-03-31 14.08.25.png

image1のみに画像を添付し、送信ボタンを押すと、以下のエラーが発生。

TypeError (no implicit conversion of nil into String):

app/uploaders/image_uploader.rb:33:in `extname'
app/uploaders/image_uploader.rb:33:in `filename'
app/controllers/characters_controller.rb:30:in `block in create'
app/controllers/characters_controller.rb:29:in `create'

app/uploaders/image_uploader.rb:33:in extname'
app/uploaders/image_uploader.rb:33:in
filename'

に問題が発生しているみたいなので確認してみる。

image_uploader.rb
def filename
  super.chomp(File.extname(super)) + '.jpg'
end

このメソッドはgem carrierwaveでgem rmagick(画像サイズを変換したり画像の拡張子を揃えるためのライブラリ)を使用するときに、必要なメソッドです。

公式マニュアル → https://github.com/carrierwaveuploader/carrierwave/blob/master/README.md

実は、今回実装したimage1~image4には、共通のアップローダー(image_uploader.rb)を使用するように設定していた。

エラー発生時にはimage1のみに画像をしていたため、
残りのimage2~image4は画像が添付されていないという認識になり、filenameメソッドが正しく動作しなくなったため、エラーが発生した

と考えた。

なので、filenameメソッドの中身の後ろにファイルの存在を確認する
if original_filename.present?
を追記した。

image_uploader.rb
def filename
  super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
end

その結果…エラーが出なくなりました!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【WAMP】WindowsとApacheとMysqlとPhpと

概要

仕事のために試したことをまとめたものです。
Apacheがwin64、PHPがwin32だとうまくいかなかったのでMySQLも統一の必要があるかもしれません。

バージョン

  • Apache:httpd-2.4.41-win32-VS16.zip
  • MySQL:mysql-8.0.19-winx64.zip
  • PHP:php-5.4.45-Win32-VC9-x86.zip

インストール

各アプリケーションのインストールから実行までの手順を記載

Apache

  1. ファイルをダウンロードし展開(C:\Apache24)
  2. httpd.confに以下を追記
    1. http://localhost/でアクセス可能に:ServerName localhost:80
    2. PHPのディレクトリを指定:PHPIniDir "c:/php"
    3. .phpファイルをPHPとして実行可能に:AddType application/x-httpd-php .php
    4. apache2.4用PHP5モジュールをロード:LoadModule php5_module "c:/php/php5apache2_4.dll"
    5. URL書き換えのためにmod_rewriteをロード:LoadModule rewrite_module modules/mod_rewrite.so
    6. .htaccessでの設定を可能に:<Directory />配下にAllowOverride All
  3. htdocsに.htaccessを作成し以下を記述
    1. URLの書き換えを有効にする:RewriteEngine on
    2. 書き換え後のパスのベースURLを指定:RewriteBase /
    3. 書き換えの条件を指定
      1. ファイルではない時:RewriteCond %{REQUEST_FILENAME} !-f
      2. ディレクトリではない時:RewriteCond %{REQUEST_FILENAME} !-d
    4. 書き換えのルールを指定(条件に一致する全てのパスをクエリをマージしてindex.phpにforward):RewriteRule ^ index.php [QSA,L]
  4. コマンドプロンプトを管理者として実行
  5. apacheを起動:httpd -k start

MySQL

MySQLインストール参考サイト(Qiita記事)

  1. 上記サイト手順6まで実行
  2. PATHを通す([展開先]\bin)
  3. MySQL初期化:mysqld --initialize-insecure --user=mysql
  4. .batファイルを作成し次の内容で保存:mysqld --defaults-file="[展開先]\my.ini" --console
  5. 接続:mysql -u root --skip-password
  6. rootユーザにパスワード設定:ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

PHP

  1. ファイルをダウンロードし展開(C:\php)
  2. php.ini-productionをコピペしphp.iniを作成
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Win10上でJavaとmysqlのWebシステム構築手順

Overview

今回は一般的な開発環境を作ります。

本番のシステムの場合は適切なセキュリティ対策を行うする必要があります。

概要

  • Mysql
    • ダウンロード
    • インストール
    • 設定
  • Java
    • Download
    • 展開するフォルダー
  • Tomcat
    • ダウンロード
    • 展開するフォルダー
  • IDE
    • ダウンロード
    • インストール
    • 設定など
  • テスト
    • サーバーにデプロイ
    • DBと接続

MYSQL

ダウンロード

https://dev.mysql.com/downloads/installer/

image.png

次の画面

image.png

ダウンロードしたものをインストール
image.png

インストール手順

image.png

そのまま次

image.png

次へ

image.png

次へ

image.png

次へ

image.png

次へ

image.png

ルートパスワードを設定、次へ

image.png

次へ

image.png

Execute !

image.png

image.png

image.png

image.png

image.png

事前に設定されたパスワードを入力し、チェックをクリック。次へ

image.png

Executeをクリック

image.png

image.png

image.png

完了

Java

ダウンロード

https://jdk.java.net/java-se-ri/11

image.png

ダウンロードしたファイル展開して「ドキュメント」フォルダに移動

Tomcat

ダウンロード

https://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-9/v9.0.33/bin/apache-tomcat-9.0.33-windows-x64.zip

展開して、JDKと同じように「ドキュメント」フォルダに移動し、完了。

IDE

Eclipse

ダウンロード

https://www.eclipse.org/downloads/download.php?file=/oomph/epp/2020-03/R/eclipse-inst-win64.exe

image.png

インストール手順

今回WEB系なのでEnterprise Javaを使う必要になります。
image.png

JDKの設定

image.png
先移動したフォルダーを設定。
image.png

image.png

インストールをクリックして、終わったら以下の画面出てきます。

image.png

「ドキュメント」フォルダの中に「new_workspace」フォルダを作成し、設定します。
image.png
LAUNCHをクリックして以下の画面が現れます。
image.png

-「Maven Project」を作成

image.png

設定

image.png

image.png

image.png

それでWeb用なMavenプロジェクトを作成完了。

サーバー環境の設定

image.png
左にあるメニューから「Server」選んで「Runtime Environment」と「Add...」
image.png
先インストールしたTomcatはバージョン9です。
image.png

インストールされたフォルダを選んで
image.png
image.png

jdkを確認して
image.png
先「ドキュメント」フォルダに移動したJDKが設定されているかどうか
image.png
じゃなかったら設定し、悶えなければ「Finish」
image.png

「Apply and Close」
image.png
完了。

テスト

Tomcat&Java

image.png

「Run on Server」
image.png

image.png

image.png

Java&Mysql

接続するための追加

https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.19
上のリンク以下のページへ、赤いまるの情報をコーピします。
image.png

pom.xmlに追加
image.png

保存するとMavenがダウロードしてくれる。
image.png

以下のコードも追加してください。

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
image.png

接続コード

これからindex.htmlに追加します。
image.png
一番上の列には以下のコードを追加してください。

<%@ page import="java.sql.*" %>

「<body>」タグの中に以下のコードをコーピ。password のところだけ、事前に設定されたパスワードを変えてください。

<%
Class.forName("com.mysql.cj.jdbc.Driver");
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "root", "password");) {
System.out.println("connect success");
}catch (Exception e)
{
System.out.println(e);
}%>

そして
image.png

データベースに接続完了。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Library not loaded: libssl.1.1.dylib (LoadError) 発生時の対処策

状況

macOS catalina で railsアプリの開発環境を整え終わって、
Windows10環境で開発してたWebアプリをクローンし、いざrails server実行だ!
と意気込んでいたら、見た事のないエラーに困惑…

解決はできたものの、いろいろと調べたら闇が深そうだったので、
自分用にメモを残しておきます。

ついでに同じエラーに悩む方の助けになれば幸いです!

エラー内容

zsh
dlopen(/Users/kirimaro/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle, 9): Library not loaded: libssl.1.1.dylib (LoadError)
  Referenced from: /Users/kirimaro/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/kirimaro/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle

OpenSSL@1.1のインストール

macOS catalina はデフォルトのSSLがLibreSSL 2.8.3が設定されています。
試しにopenssl versionを実行すると、LibreSSL 2.8.3と出力されはずです。
上記エラーの原因はこいつです。

gem "mysql2"はOpenSSLと依存関係にあり、LibreSSLがデフォルトだとLibrary not loaded: libssl.1.1.dylibといったロードエラーが発生します。

これを解消するために、まずOpenSSL@1.1をインストールします。

尚、OpenSSL@1.1Homebrewでインストールを行いますが、
Homebrewのインストール方法については、他で調べれば記事が大量だと思うのでここでは割愛させていただきます!
※Homebrewの利用にはXcodeが必須となりますので、インストールしていない方は先にインストールしておきましょう。

既にHomebrewをインストール済みの方は、以下のコマンドを実行します。

zsh
% brew install openssl@1.1

インストールが完了したら、brew info opensslを実行します。

するとOpenSSL@1.1について以下のような情報が表示されます。

zsh
% brew info openssl
openssl@1.1: stable 1.1.1d (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/openssl@1.1/1.1.1d (7,983 files, 17.9MB)
  Poured from bottle on 2020-03-30 at 20:49:11
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/openssl@1.1.rb
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl@1.1/certs

and run
  /usr/local/opt/openssl@1.1/bin/c_rehash

openssl@1.1 is keg-only, which means it was not symlinked into /usr/local,
because openssl/libressl is provided by macOS so don't link an incompatible version.

If you need to have openssl@1.1 first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

For pkg-config to find openssl@1.1 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt

重要なのは、echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrcで、
これをzshにコピペして実行する事で、デフォルトのSSLがOpenSSLへ変更されます。

実は、エラーの解消自体はOpenSSLをインストールしていれば、デフォルトに設定していなくても問題なく解決できます。

私自身まだそこまで詳しくないのですが、開発ツールなどの多くがまだまだOpenSSLへ依存している状況もあるようなので、
デフォルトに指定しておいたほうが無難なのかなと思います。

正しく切り替わったか確認したい場合は、zshを再起動したうえでopenssl versionを入力してみて下さい。
OpenSSL @1.1.1dといった感じで、デフォルトSSLが切り替わっている事が確認できると思います。

mysql2ビルド時に必要となるlib/includeのPathを環境変数に追加

~/.zshenvファイルをviなどのテキストエディタで開き、
brew info openssl実行時に表示される下記パスを追加します。

保存したら反映するために、zshを再起動します。

export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

bundle configにビルドパスを追加

railsアプリのルートディレクトリへ移動し、zshから下記コマンドを実行します。

zsh
% bundle config build.mysql2 --with-ldflags=$LDFALGS --with-cppflags=$CPPFLAGS

これで、bundle installを実行した際、mysql2のインストール時にビルドオプションとして、opensslのlib/includeが読み込まれます。

Railsアプリからすでにインストール済みのmysql2をアンインストール

下記コマンドを実行し、インストール済みのmysql2を削除します。

zsh
% bundle exec gem uninstall mysql2

bundle install を実行

既にbundle configでビルドオプションを設定済みですので、bundle install若しくはbundleのみでインストール可能です。

zsh
% bundle install

これで、ロードエラーが解消され、正常にサーバーが起動されると思います。

デフォルトSSLをLibreSSLに戻したい時

デフォルトSSLをLibreSSLに戻したい場合は、~/.zshrcに追加された
export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"を削除・保存し、zshを再起動すると、
LibreSSLがデフォルトSSLに戻ります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Library not loaded: libssl.1.1.dylib (LoadError) 発生時の解決方法

状況

macOS catalina で railsアプリの開発環境を整え終わって、
Windows10環境で開発してたWebアプリをクローンし、いざrails server実行だ!
と意気込んでいたら、見た事のないエラーに困惑…

解決はできたものの、いろいろと調べたら闇が深そうだったので、
自分用にメモを残しておきます。

ついでに同じエラーに悩む方の助けになれば幸いです!

エラー内容

zsh
dlopen(/Users/kirimaro/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle, 9): Library not loaded: libssl.1.1.dylib (LoadError)
  Referenced from: /Users/kirimaro/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/kirimaro/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle

OpenSSL@1.1のインストール

macOS catalina はデフォルトのSSLがLibreSSL 2.8.3が設定されています。
試しにopenssl versionを実行すると、LibreSSL 2.8.3と出力されはずです。
上記エラーの原因はこいつです。

gem "mysql2"はOpenSSLと依存関係にあり、LibreSSLがデフォルトだとLibrary not loaded: libssl.1.1.dylibといったロードエラーが発生します。

これを解消するために、まずOpenSSL@1.1をインストールします。

尚、OpenSSL@1.1Homebrewでインストールを行いますが、
Homebrewのインストール方法については、他で調べれば記事が大量だと思うのでここでは割愛させていただきます!
※Homebrewの利用にはXcodeが必須となりますので、インストールしていない方は先にインストールしておきましょう。

既にHomebrewをインストール済みの方は、以下のコマンドを実行します。

zsh
% brew install openssl@1.1

インストールが完了したら、brew info opensslを実行します。

するとOpenSSL@1.1について以下のような情報が表示されます。

zsh
% brew info openssl
openssl@1.1: stable 1.1.1d (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/openssl@1.1/1.1.1d (7,983 files, 17.9MB)
  Poured from bottle on 2020-03-30 at 20:49:11
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/openssl@1.1.rb
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl@1.1/certs

and run
  /usr/local/opt/openssl@1.1/bin/c_rehash

openssl@1.1 is keg-only, which means it was not symlinked into /usr/local,
because openssl/libressl is provided by macOS so don't link an incompatible version.

If you need to have openssl@1.1 first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

For pkg-config to find openssl@1.1 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt

重要なのは、echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrcで、
これをzshにコピペして実行する事で、デフォルトのSSLがOpenSSLへ変更されます。

実は、エラーの解消自体はOpenSSLをインストールしていれば、デフォルトに設定していなくても問題なく解決できます。

私自身まだそこまで詳しくないのですが、開発ツールなどの多くがまだまだOpenSSLへ依存している状況もあるようなので、
デフォルトに指定しておいたほうが無難なのかなと思います。

正しく切り替わったか確認したい場合は、zshを再起動したうえでopenssl versionを入力してみて下さい。
OpenSSL @1.1.1dといった感じで、デフォルトSSLが切り替わっている事が確認できると思います。

mysql2ビルド時に必要となるlib/includeのPathを環境変数に追加

~/.zshenvファイルをviなどのテキストエディタで開き、
brew info openssl実行時に表示される下記パスを追加します。

保存したら反映するために、zshを再起動します。

export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"

bundle configにビルドパスを追加

railsアプリのルートディレクトリへ移動し、zshから下記コマンドを実行します。
※特定のアプリにのみビルドオプションを指定したい場合は、該当アプリのルートディレクトリにいる状態でローカルの方のコマンドを実行してください!

zsh
#グローバル(別のアプリでmysql2をインストールする場合も、ビルドオプションが適用される)
% bundle config build.mysql2 --with-ldflags=$LDFALGS --with-cppflags=$CPPFLAGS

#ローカル(現在ルートディレクトリとなっているアプリでのみ、mysql2インストール時にビルドオプションが渡される)
% bundle config --local build.mysql2 --with-ldflags=$LDFALGS --with-cppflags=$CPPFLAGS

これで、bundle installを実行した際、mysql2のインストール時にビルドオプションとして、opensslのlib/includeが読み込まれます。

Railsアプリからすでにインストール済みのmysql2をアンインストール

下記コマンドを実行し、インストール済みのmysql2を削除します。

zsh
% bundle exec gem uninstall mysql2

bundle install を実行

既にbundle configでビルドオプションを設定済みですので、bundle install若しくはbundleのみでインストール可能です。

zsh
% bundle install

これで、ロードエラーが解消され、正常にサーバーが起動されると思います。

デフォルトSSLをLibreSSLに戻したい時

デフォルトSSLをLibreSSLに戻したい場合は、~/.zshrcに追加された
export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"を削除・保存し、zshを再起動すると、
LibreSSLがデフォルトSSLに戻ります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む