MySQLエラーでRailsサーバーが全然起動しなかったんだよ
ひっさしぶりに1からRailsの環境を作ってみました。
すると、いろいろつまずきます。
最初に躓いたのがMySQLでした。
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) (Mysql2::Error)
$ rails s => Booting Puma => Rails 5.0.4 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options Exiting /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.8/lib/mysql2/client.rb:89:in `connect': Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) (Mysql2::Error) from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/mysql2-0.4.8/lib/mysql2/client.rb:89:in `initialize' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/mysql2_adapter.rb:25:in `new' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/mysql2_adapter.rb:25:in `mysql2_connection' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:729:in `new_connection' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:773:in `checkout_new_connection' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:752:in `try_to_checkout_new_connection' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:713:in `acquire_connection' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:490:in `checkout' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:364:in `connection' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:883:in `retrieve_connection' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_handling.rb:128:in `retrieve_connection' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.4/lib/active_record/connection_handling.rb:91:in `connection' from /home/user/rwork/projects/config/environment.rb:15:in `<top (required)>' from /home/user/rwork/projects/config.ru:3:in `require_relative' from /home/user/rwork/projects/config.ru:3:in `block in <main>' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:55:in `instance_eval' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:55:in `initialize' from /home/user/rwork/projects/config.ru:in `new' from /home/user/rwork/projects/config.ru:in `<main>' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:49:in `eval' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:49:in `new_from_string' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/builder.rb:40:in `parse_file' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:319:in `build_app_and_options_from_config' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:219:in `app' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/server.rb:84:in `app' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/server.rb:354:in `wrapped_app' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/server.rb:148:in `log_to_stdout' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/server.rb:102:in `start' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:90:in `block in server' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:85:in `tap' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:85:in `server' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands/commands_tasks.rb:49:in `run_command!' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/railties-5.0.4/lib/rails/commands.rb:18:in `<top (required)>' from /home/user/rwork/projects/bin/rails:9:in `require' from /home/user/rwork/projects/bin/rails:9:in `<top (required)>' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `load' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `call' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/client.rb:30:in `run' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/bin/spring:49:in `<top (required)>' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `load' from /home/user/rwork/projects/vendor/bundle/ruby/2.3.0/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `<top (required)>' from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68:in `require' from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68:in `require' from /home/user/rwork/projects/bin/spring:15:in `<top (required)>' from bin/rails:3:in `load' from bin/rails:3:in `<main>'
はい、出ましたMySQL2::Error
。
久々に現れたので、解決するのにまあまあ時間がかかりました。
mysqlを起動してみる
$ sudo mysql.server start `mysql.server: コマンドが見つかりません`
はいはい。PATHが通ってないんでしょ。
.bash_profile
へPATHを記入。
export PATH="/usr/bin/mysql/bin:$PATH"
を入れるだけ。
$ source ~/.bash_profile # .bash_profileを反映 $ sudo mysql.server start `mysql.server: コマンドが見つかりません`
なにぃ!?
ちょっとイミフなんで、別の方法で起動しました。
$ sudo mysql service start $ mysql -u root -p password入力:
これでちゃんと入れるようなので、問題なし。
mysql.serverコマンドが使えないのはまた今度とすることにしました。
もう一度rails s
さっきと同じMySQL2::Error
。
ん〜、よーわからん。。。
っと悩んでいると、よく考えたらrailsの方でsocketを指定していなかったことを思いだしました。
$ mysql_config --socket /var/run/mysqld/mysqld.sock
とりあえずmysql_config
でsocketの位置を確認。
/etc/mysql/my.cnf
にsocket情報を追記してあげます。
$ sudo vim /etc/mysql/my.cnf 1 # 2 # The MySQL database server configuration file. 3 # 4 # You can copy this to one of: 5 # - "/etc/mysql/my.cnf" to set global options, 6 # - "~/.my.cnf" to set user-specific options. 7 # 8 # One can use all long options that the program supports. 9 # Run program with --help to get a list of available options and with 10 # --print-defaults to see which it would actually understand and use. 11 # 12 # For explanations see 13 # http://dev.mysql.com/doc/mysql/en/server-system-variables.html 14 15 # 16 # * IMPORTANT: Additional settings that can override those from this file! 17 # The files must end with '.cnf', otherwise they'll be ignored. 18 # 19 20 !includedir /etc/mysql/conf.d/ 21 !includedir /etc/mysql/mysql.conf.d/ 22 23 [mysqld] 24 character-set-server=utf8 25 skip-character-set-client-handshake 26 default-storage-engine=INNODB 27 socket=/var/run/mysqld/mysqld.sock 28 29 [client] 30 socket=/var/run/mysqld/mysqld.sock 31 32 [mysqldump] 33 default-character-set=utf8 34 35 [mysql] 36 default-character-set=utf8
僕の設定はこんな感じです。
mysqld
とclient
へsocketの位置を追記すればおkです。
そして、rails側のconfig/database.yml
へsocketの追加と設定しているパスワード・ユーザー名を追加すればおk。
パスワード・ユーザー名は環境変数を設定して見えないようにしてあげりゅこと。
1 default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: 5 5 username: username 6 password: password 7 socket: /var/run/mysqld/mysqld.sock
これでrails sで問題なくpumaが動きました。
結構前に環境作ってからやってなかったんでまあまあ時間がかかってしまいました。
最後に
また最初からプロジェクトを作るときに、設定するのくっそ面倒くさいので、dockerで管理しようかなと思案中です。
【備忘録】vimを使い始めてみた
Vimは早い!
と、よく言われますが、コマンドでの移動や操作に慣れればの話ですよね。。。
僕はまだ簡単なカーソル移動しかできないので、全く恩恵を感じません。
感じる土俵にすら立っていないのかもしれないですね。
今のLinuxPCで開発やら勉強やらやるのに、エディタが必要だなぁと思っていましたが、今使っている会社PCのAtomはめっちゃ重いし、遅いとやる気が削ぎれていくので、この際Vimに乗り換えることにしました。
とりあえず、使いそうなコマンドをメモっていきます。
Vimコマンド
基本カーソル移動
- k 上移動
- l 右移動
- h 左移動
- j 下移動
- w 次の単語
- b 前の単語
- f(文字) カーソルがある行の(文字)に移動
- F(文字) カーソルがある行の(文字)に移動(逆向き)
- 0 行頭
- ^ 行頭
- $ 行末
- % 対応するカッコに移動
- ctrl + u 半画面上
- ctrl + d 半画面下
- zz カーソルが画面中央になるようにスクロール
- ctrl + o 古いカーソル位置に戻る
- ctrl + i 新しいカーソル位置に進む
モード変更
- i 挿入モード
- esc ノーマルモード
- : コマンドモード
- v ビジュアルモード
- ctrl + v ビジュアルモード(矩形)
- o 新しい行を追加し挿入モード
- R 上書きモード
単語補完
- ctrl + p 前方検索の単語補完
行移動
- gg 最初の行
- 88G 88行目
- G 最終行
- H 画面上の最初の行(Home)
- M 画面上の中央の行(Middle)
- L 画面上の最後の行(Last)
ファイル操作
検索と置換
- ・ カーソル下の単語を検索
- '#' カーソル下の単語を検索(上方向に検索)
↑
マークダウンになってしまうためシングルクォートでかこんだ - :%s/hage/hoge/g 単語の置換(hageをhogeへ置換) %はファイル全体を表す
編集
- . 直前の変更を繰り返す
- u Undo
- ctrl + r Redo
ウィンドウ
- :vsplit 画面を左右に分割する
- : filename いまいるウィンドウにファイルを開く
- :e test*.cc ワイルドカードを指定してファイルを開く
- ctrl + wh 左のウィンドウへ
- ctrl + wl 右のウィンドウへ
コピー&ペースト
- yy いまいる行をコピー
- p カーソルの場所にペースト
- yy5p 現在の行をコピーし、下に5行追加する
- gv 直前の選択範囲を再選択
とまあ書いてみましたが、使ってみないと覚えないですよね。。。。
ちょっと所要で簡単なRailsアプリを作らないといけなくなったので、その時に使いながら勉強していきます。
参考
https://qiita.com/hide/items/5bfe5b322872c61a6896
ただ列挙しただけというね!
さっさと覚えてvimmerになります。
バイナリーで保存したexcelデータをRubyXLを使って編集する
新年明けましておめでとうございます。
ブログ開設して初の技術記事です\(^o^)/
技術記事を書くときは特に業務でやったことの復習と備忘録代わりに書いてます。
今回も同じで、最近久しぶりに触ったRubyXLというgemに関して書いていきたいと思います。
RubyXLとは
主にexcel書き込み専用のgemです。
xlsxとxlsmに対応してます(確か)
あとは主なところはgithubを見ていただければ使い方はわかるかと\(^o^)/
ここ
↓
github.com
僕は読み込みではrooを、書き込みではRubyXL使っています。
rooにはちょっとした罠があるので、それはまた今度記事として書きたいなと。
動作環境
本題
ブログのタイトルにあるとおり、DBに登録しているバイナリーデータに対して書き込みを行います。
実はまだ出力が未検証なので、後日そこは別の記事としてあげたいと思う所存です。
フレームワークはもちろんRuby on Railsです。
ExcelFileというモデルにbinary型のexcel_binカラムが存在するものとして話を進めていきます。
ファイルサイズ(limit)は特段設けずにそのままで。
まずバイナリーファイルの保存
適当なexcelファイルを準備します。 ここでは test.xlsx
とします。
保存してアクセスしたときに、データがちゃんと取得できているのかどうか確認するために、エクセルファイルのB2に テスト
、シート名をテストシート
としておきます。
excel = File.binread('該当ファイルパス/test.xlsx') ExcelFile.create(name: 'テストエクセル', excel_bin: excel)
test.xlsx
を置く場所はRailsプロジェクトの中でも別のディレクトリでもどこでもいいです。
File#binread
でバイナリーファイルとして読み込むときにファイルパスを指定するので問題ありません。
(なんの説明もなくExcelFileモデルにnameカラムがありますが、飾りみたいなもんです。気にしないでください。)
macなら、この状態でパンケーキと呼ばれるSequel Proを使い、該当のバイナリーデータをxlsxで保存すると、 test.xlsx
と同じ内容のエクセルファイルを取得できるはずです。
興味のある方はやってみてください。
RubyXLを使ってバイナリーファイルを解析
何をするにしても一次情報を見ろとよくいいますが、実感しました。
というのも、RailsをやっていないPLの下で働いている僕なのですが、PLから教えていただいた一次情報で助けられたからです。
まだまだカスだなと、ゴミクズだなと実感しましたね。。。
ここを見せていただきました。PLに感謝です。
http://www.rubydoc.info/gems/rubyXL/3.3.21/RubyXL/Parser
RubyXL::Parser.parse
でファイルパスを指定してやる方法は知っていたのですが、バイナリーファイルを展開する方法は知りませんでした。 むしろ、バイナリーファイルはRubyXLでは展開できないものと思っていましたが、違いました。
RubyXL::Parser.parse_buffer
でバイナリーファイルを展開できるようです。
excel_bin = ExcelFile.find_by(name: 'テストエクセル').excel_bin book = RubyXL::Parser.parse_buffer(excel_bin) worksheet = book[0] worksheet.sheet_name #=> テストシート worksheet[1][1] #=> テスト
RubyXL
では座標を[y][x]
で指定していきますが、A1が[0][0]
になります。
なので、B2は[1][1]
。
RubyXLで展開ができたので、あとは書き込んで出力するだけです。
簡単ですね。
最後に
一次情報を見る前には詰んでてどうしようもない状態が続いていたんですが、なんとか実装できました。
後日、Railsのコードと一緒にまた記事にしたいなと思います。
ではでは。
ブログ開設してみた
今まで技術コミュニティーのQiitaに記事を投稿してきましたが、これからは何気ないことも書いていきたいなと思ったので開設してみました。
ちなみに本ブログを開設したのは6月です←
そゆひもありますよね。
会社ではmac、自宅ではwinと開発環境が異なり、帰ってきたらcmdを触る毎日に嫌気がさしてきたので、とうとうLinuxに乗り換えました\(^o^)/
elementary OSです。macライクでとても使いやすい。
何よりもcmdを使わないでいいのがいい!
ヤフオクで運良く1万円で落としたThinkPad x230に安売りしてたSSHDを積んで使ってます、いいですねThinkPad。
これからこのPCをつかって快適に開発 & 勉強をやっていこうと思います!
たまに筋肉のことだったりギターのことだったり書くこともありますが、よろしくです( ゚д゚)ノ
そういやtwitterでサンプリンクスさんから頂いたので、ついでに写真あげておきます\(^o^)/
全く関係ないですがw
ではでは ノシ