homebrewで入れたmysqlをバージョンアップした話

macの中に入っていたmysql、、、いままでは無視していたが実はバージョンが古かった。

  • brew list | grep mysqlとすると ->mysql@5.5 とでている、つまりバージョン5.5が入っていたのだ。 ちなみに今(2017年10月30日)の最新バージョンは 5.7.20 ....となっている。

macOS自体を sierra -> high sierr にした関係もあり、思い切ってバージョンアップをして見た話が今日のブログ。

あらためて。今のmysqlを確認したいのでまず。 - brew list ’mysql@5.5’ と出てきた。

やはり古い。。。。

いま走っているmysqlを止め、syslinkを削除し、アンインストールというのが@5.5との別れの流れ。 その逆をすれば最新が手に入るはず。。。

 - mysql.server stop
//mysqlを止める
 - brew unlink mysql@5.5
//mysqlのりんくの削除、@5.5じゃない人の場合はbrew listで出てきた奴を打ち込めばいいはず。
- brew uninstall mysql@5.5
//これでバイバイ

と、簡単に削除できた。

では最新版を入れよう。

- brew install mysql
- brew link mysql
//->うまくいくと思ったがいかなかった。。。過去の自分が何かをしていた見たい
-   brew unlink mysql && brew link mysql
//こうしてやることで、過去に貼ったリンクを消しつつ、新規に作成できるみたいです
- mysql.server start
//SUCCESS!となれば成功!

自分は自動起動設定をしていないのでここで終了だが、mysql自動起動設定等がしたい場合はここで調べてみてください〜

アクセスメソッドについて考えてみた

記事を書く経緯

先日知り合いから

クラスメソッド内でインスタンス変数使えないはずなのに…

クラスメソッド内でeach文で回してインスタンス変数つかうとエラーが起こらなくて謎い

という質問をもらいました。 ...。。o0O...そもそもそのコード汚いのではというのは抜きです、、、w

それを聞いて僕はすぐに解説ができなかったので備忘録的にまとめます。

 本記事の流れ

  1. そもそもクラス。インスタンスとはなにか
  2. クラスメソッド。インスタンスメソッド。 3 . アクセスメソッドの必要性 について言及していきたいと思います。あくまで個人の見解なので間違い等あれば指摘していただきたく思います。

 そもそもクラス。インスタンスとはなにか

クラス、インスタンスとは →クラスとは設計図であり。インスタンスはその設計図から生まれた物。 という記事をみかけますが、あまりに the 雑 ではありませんか!??w

まあ実際その一文が全てではあるものの正直プログラミングはじめてまもない頃これ見てもさっぱりですよね???

基本的にクラスとは。 設計図、雛形。枠組み。何かの土台となるもの、というような認識でよいと思っています。(最初はこのような理解のが入りやすいはず。)

インスタンスとは。 そのクラスの実態です。設計図から生成された実体となっています。 クラスは'モノ'として存在はしないですが、インスタンスは固有の'モノ'として存在し、認識することが可能です。

例にして考えて見ます
クルマの設計図というものは下記のようになると思います。
...........※(トラック等も含みます。)
 クルマの型番。クルマの形(普通自動車??大型?トラック?)。最大積載量。最大乗車人数。
ハンドルの位置。タイヤの個数。クルマの色。最大速度。重量。
といったような様々な情報をもっています。


この設計図を元に工場でクルマの生産が始まり。クルマが作られると。
レクサス LC (赤) 4人まで。排気量は〇〇
レクサス RC F (青)4人まで。排気量は〇〇
ホンダ フリード(シルバー)6人まで。排気量は〇〇

のようににクルマにはそれぞれの情報が存在しています。
このようなそのクルマ自身の固有の値をインスタンス変数と呼びます。

インスタンス変数とは。 インスタンス変数とはインスタンス自身が固有にもっている情報です。 クルマの色や、最高速度、車種といった情報が含まれます。

インスタンスに対して変数があれば当然クラスにも。クラス変数というモノが存在しています。 これはそのクラスにおいて使うことができる変数です。 先ほどの例でいうと、類型の生産したくるまの数を数えたりする際はクラス変数に数値を入れて管理したりすると楽にできますね! (クラス変数はCar class ではあまりいい用例がなさそうです。。。)

ここまでの情報を少し簡略化しながらソースコードにしてみると

gist58aef3c97db41bbe7f37470faf809ff9

クラスメソッド。インスタンスメソッド。

クラスメソッドとは。 →そのクラスに対し、何か操作を行うメソッドのこと。 今回の例だとクルマクラスに対して何か操作をするということになります。(具体例がなく申し訳ないです。)

インスタンスメソッドはインスタンスに利用することができ何か操作をおこなうこと インスタンスメソッドは、例えば、レクサスの平均速度を求めたり。速度メーターの累計を調べたりと。。そのインスタンスの何かについて調べる必要がある

アクセスメソッドの必要性

オブジェクト指向における”カプセル化”の概念と強く関係を持っています。 アクセスメソッドを利用してインスタンスのもっているインスタンス変数にアクセスを可能にすることで、そのインスタンス変数へのアクセス方法を1つに統一することができます。

> インスタンス変数の隠蔽
インスタンス変数は常にアクセサメソッドで包み、直接参照しないようににします。
(引用:オブジェクト指向設計実践ガイド p.46)

とあるように特にrubyではこのような手法を用います。 java等の言語においてはgetter/setter とよばれるアクセサメソッドを利用することが通例とされているようです

 本題

冒頭に記した通り、知り合いから

クラスメソッド内でインスタンス変数使えないはずなのに…

クラスメソッド内でeach文で回してインスタンス変数つかうとエラーが起こらなくて謎い

という質問をもらいました。 これはどういう構造だったのかというと

gist9b3495b3db6398f8ca507441ab30f363

このような感じのコードのsum_resultのような処理だったと思います。(多分。。) クラス変数によって配列でインスタンスを管理している状態。 配列の中身はインスタンスをもっているのでクラスメソッドであっても、 クラス変数がインスタンスを参照している故に、インスタンス変数、インスタンスメソッドへアクセスが可能ということになっていました。。。

まとめ

解説を求められると。うまく日本語にできないもどかしさからブログにまとめようと思い書き始めましたが、見返してみると うまくまとまってない。。。。。。。。。orz 文章構成をちゃんとかんがえてから着手したほうがいいですね。。

気が向いたらfixしていきます。もしきになる点等あればコメントしていただければ幸いです

"Rails serverを見やすくするツール rails-dashboard"を使ってみた

rails-dashboard とは

  • rails serverのログをみやすくパースしてくれるツール
  • 開発者自身が"npm binを作ってみたかったから"という理由でgemではなくnpmでの配信になっているらしい (下記が詳細の記事です) qiita.com

  • 体感としては wiresharkにすごい似ているなぁ。。と感じたw

  • npmパッケージリンク

  • githubリンク

導入方法

nodebrew -v && npm -vでエラーがでなければそのまま進む(エラーでたらインストールします:後述)

$ npm install -g rails-dashboard

$ rials-dash-board -V 
//入っているか確認

nodebrew -v && npm -vがエラー(まだインストールしたことない場合)

//nodebrew installl

$ brew install nodebrew

$ nodebrew -v
//インストールの確認→バージョン出ればおk

$ vim ~/.bash_profile
//環境変数の追加(内容下記)
 > export PATH=$PATH:$HOME/.nodebrew/current/bin:$PATH

//alias "rs" でrails-dashboardを起動する設定(~/.bash_profileに追記)
 > alias rs="rails-dashboard rails s"

//bash_profileの読み込み。
$ source ~/.bash_profile

//インストール時に下記ディレクトリがないとエラーになるので"lsや cd"をつかって確認する。→なければ作成
"/usr/local/var/nodebrew/src"

$ mkdir /usr/local/var/nodebrew
$ mkdir /usr/local/var/nodebrew/src

//最新のnodeをinstall
$ nodebrew install-binary latest

//インストールできたか確認
$ nodebrew ls

//installしたnode.jsを利用するよう変更
$ nodebrew use latest

//再び確認
$ nodebrew ls 
//current: v8.4.0
という風になっていれば成功。


node -v
npm -v
でバージョンが表示されれば成功しています。

rails-dashboard実行時につまったこと。

  • railsのバージョンによってはうまく起動しない。。。 ~ > 5.0.3 && 5.1.2系では動いたが4系のrailsアプリではうまく動かなかった ~ (自分の環境の問題かもしれないが。。。。。。)

~ 4系で実行するとサーバーログが少しでて終了してしまう。。。。~

rails-dashboard rails s
[2017-09-07 13:15:11] INFO  WEBrick 1.3.1
[2017-09-07 13:15:11] INFO  ruby 2.1.8 (2015-12-16) [x86_64-darwin16.0]

qiiitaをみると

Rails5.1で動作確認をしていますが、ログのフォーマットが変わっていなければRails4以下でも動くはずです。 となっているのでもしかしたら4系と5系で”ログのフォーマットが変わっているのかも”しれませんね。。。


上記のような場合は下記で対応できます!!(追記) Gemfileに

gem ‘puma’ (僕はgem ‘puma’, ‘~> 3.7’) と記述を追記し、 $ bundle install

するとrails versionに関係なく、実行できました!

——-ここから下は私の苦戦の跡wです———–

僕はこの原因を探すのに苦戦してしまい。。。。。
rails-dashboardに使用されている下記のライブラリもインストールしました。
(おそらく不要かと思います。。もし5系でも動かなかったら入れてみてください)   1. blessed 2. React 3. react-blessed

方法は

npm install react@0.14.0 blessed
npm install react-blessed
  • pry-rails によるデバッグができない???
    まだがっつり使ってるわけではないので詳細は省きますが、 binding.pryで処理は止まるが、通常のデバッグのような手法ができなかった。。。。 処理を止めた、ところでリクエストパラメータをのぞいたり、DBへの保存を試みたりするさいには通常の"rails s"をするしかするしかないのだろうか??

また何かあれば追記していく予定です。

Sprockets::FileNotFound がでた

  • rails s してviewにアクセスすると Sprockets::FileNotFound になった エラー画面はこちら

gyazo.com

ActionView::Template::Error (couldn't find file 'rails-ujs' with type 'application/javascript'
Checked in these paths:
  /Users/fumihumi/project/toy_app/app/assets/config
  /Users/fumihumi/project/toy_app/app/assets/images
  /Users/fumihumi/project/toy_app/app/assets/javascripts
  /Users/fumihumi/project/toy_app/app/assets/stylesheets
  /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/jquery-rails-4.3.1/vendor/assets/javascripts
  /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/coffee-rails-4.2.2/lib/assets/javascripts
  /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actioncable-5.0.3/lib/assets/compiled
  /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/turbolinks-source-5.0.3/lib/assets/javascripts
  /Users/fumihumi/project/toy_app/node_modules):
    4:     <title>ToyApp</title>
    5:     <%= csrf_meta_tags %>
    6:
    7:     <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    8:     <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
    9:   </head>
   10:

app/assets/javascripts/application.js:13
app/views/layouts/application.html.erb:7:in `_app_views_layouts_application_html_erb___4143786291367192025_70271393158240'
  Rendering /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout
  Rendering /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (7.0ms)
  Rendering /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.0ms)
  Rendering /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.8ms)
  Rendered /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (62.9ms)
Started GET "/users" for 127.0.0.1 at 2017-09-06 16:02:18 +0900
Processing by UsersController#index as HTML
  Rendering users/index.html.erb within layouts/application
  User Load (0.2ms)  SELECT `users`.* FROM `users`
  Rendered users/index.html.erb within layouts/application (2.1ms)
Completed 200 OK in 164ms (Views: 161.4ms | ActiveRecord: 0.2ms)

該当箇所はこちらのファイル。(assets/javascripts/application.js) app/assets/javascripts/application.jsの13行目にある(はず)の

//= require rails-ujs
この記述を削除すれば治ります!

undefined method `load_defaults' てなった

railstutorialを始めようとして"rails s " した時に死んだメモ

 undefined method `load_defaults' てなった

実行時エラーは下記。

```

fumihumi:toy_app (master)$ rails sfumihumi:toy_app (master)$ rails s
/Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/railties-5.0.3/lib/rails/railtie/configuration.rb:95:in `method_missing': undefined method `load_defaults' for #<Rails::Application::Configuration:0x007f96482e2f80> (NoMethodError) from /Users/fumihumi/project/toy_app/config/application.rb:12:in `<class:Application>' from /Users/fumihumi/project/toy_app/config/application.rb:10:in `<module:ToyApp>' from /Users/fumihumi/project/toy_app/config/application.rb:9:in `<top (required)>' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/railties-5.0.3/lib/rails/commands/commands_tasks.rb:88:in `require' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/railties-5.0.3/lib/rails/commands/commands_tasks.rb:88:in `block in server' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/railties-5.0.3/lib/rails/commands/commands_tasks.rb:85:in `tap' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/railties-5.0.3/lib/rails/commands/commands_tasks.rb:85:in `server' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/railties-5.0.3/lib/rails/commands/commands_tasks.rb:49:in `run_command!' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/railties-5.0.3/lib/rails/commands.rb:18:in `<top (required)>' from /Users/fumihumi/project/toy_app/bin/rails:9:in `require' from /Users/fumihumi/project/toy_app/bin/rails:9:in `<top (required)>' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `load' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/rails.rb:28:in `call' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/client.rb:30:in `run' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/spring-2.0.2/bin/spring:49:in `<top (required)>' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `load' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/spring-2.0.2/lib/spring/binstub.rb:31:in `<top (required)>' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68:in `require' from /Users/fumihumi/.rbenv/versions/2.3.4/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68:in `require' from /Users/fumihumi/project/toy_app/bin/spring:15:in `<top (required)>' from bin/rails:3:in `load' from bin/rails:3:in `<main>'

```

load defaultsがない。。。。

ただここまでで実行したのは

1. rails new

2. rbenv local 2.3.4

3. bundle install 

をしただけで"load defaults"なんていじっていない。。

 

では"rake"コマンドができるのかどうか確認したところ

```

rake aborted!
NoMethodError: undefined method `load_defaults' for #<Rails::Application::Configuration:0x007f7fc86dfd68>
/Users/fumihumi/project/toy_app/config/application.rb:12:in `<class:Application>'
/Users/fumihumi/project/toy_app/config/application.rb:10:in `<module:ToyApp>'
/Users/fumihumi/project/toy_app/config/application.rb:9:in `<top (required)>'
/Users/fumihumi/project/toy_app/Rakefile:4:in `require_relative'
/Users/fumihumi/project/toy_app/Rakefile:4:in `<top (required)>'
(See full trace by running task with --trace)

```

 rake aborted.......

これもできない。。。。

 > NoMethodError: undefined method `load_defaults' for #

全く同じですね。。。

 

 

結論

config/application.rbの中の

 > config.load_defaults 5.1

こいつが悪いみたい。

なのでこれをコメントアウトしてやる

> #config.load_defaults 5.1 

```

fumihumi:toy_app (master *)$ rake
Run options: --seed 63099

# Running:

```

はい治った。

 

という訳で

config.load_defaults 5.1

ですがこれはrails 5.1系からできたものみたいで、、、

rails 5.0.3系を使っていた自分はこのエラーになったようです。