gem install mysql2 -v '0.4.9'ができない (ubuntu)
ubuntu 16 に ruby on rails の環境を整える(備忘録)
タイトル通り、rails 環境構築のコマンドをメモって行くもの
- まずは必要そうなものを"apt"で入れる。
sudo apt-get update # sudo apt-get install vim sudo apt-get -y install git curl g++ make sudo apt-get -y install zlib1g-dev libssl-dev libreadline-dev sudo apt-get -y install libyaml-dev libxml2-dev libxslt-dev sudo apt-get -y install sqlite3 libsqlite3-dev nodejs sudo apt-get -y install mysql-server
- aptでは古いものが入ってしまうので最新のrubyが入らない時がある。そのため、git clone で取得する。
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
vimでいじるのであれば、
eval "$(rbenv init -)"
コマンドで実行するのであれば。(下記:evalコマンド)
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
その後。設定の読み込みをするため
source ~/.bash_profile
which rbenv としてpathが出力されればおk
- ruby install
install したいバージョンを探すため
rbenv install --list (installできる、rubyのバージョン確認。) rbenv install 2.4.2 (2.4.2をインストール) rbenv versions
-> 2.4.2(installedしたバージョン)があれば成功
rbenv global 2.4.2 rbenv rehash ruby -v
-> 2.4.2になってれば成功
- rails install
gem install bundler --no-document gem install rails -> version指定したい場合は下記添付記事参考に > gem install rails -v 4.2.6 installのあとは、 "rails -v"とし、確認します。 今回の場合は、Rails 5.1.4 がはいっていたのでそれが返却されました。
おわり。
rails new sample -d mysql (-d optionはdatabaseを指定するもの。) としてうまくいけば大丈夫かと
余談
mysqlを使うので、gem mysql2 -v 0.4.9が必要だったんだが、エラーに遭遇(別記事にしようかな)
mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.
ruby でqiitaのトレンド収集スクリプト書いてみた
qiitaには毎日のトレンドのようなものを集めているページがあることをしり、どうにかして収集できないかと考えた。
先日友人がslackへの自動投稿をつくっていたのだが、slackだと過去の記事を遡る際に消えてしまうこともしばしば。。。。
永遠にバックアップをとりたいな。と思っていた時に思いついたのがgithubにpushし続ければバックアップになるんじゃないかと、
shellscriptで毎日自動化するもよし、
heroku schedulerで走らせるもよし、
どっかのサーバーのリソースを一瞬借りて実装するもよし、。
毎日手動で実行でも良い。
いづれかの方法でscriptを走らせればgitにpushされます。
以下:readme
qiita-trendsとは。
- 1日一回qiitaのトレンドを取得するプログラム
how to
下記のgemを利用しているため、
bundle list にて下記を確認する必要がある。
#shell command require 'shell' #git require 'git' #scraping require 'nokogiri' require 'open-uri'
source codeについて
WORKINGDIR = '~/qiita'
-> この定数は取得してきたqiita's-trendをどのディレクトリに保存するのかをさしています。
defaultでは。{/Users/"username"/qiita}配下に作成するようになってるので適宜変更してみてください。
DATE = Date.today.to_s.gsub('-','')
保存するファイル名は" #{DATE}.md "というスタイル (20171108.md)のようになっているスタイルを変える場合は、strftimeを使うことを推奨
get_docメソッドによって、(https://qiita.com/popular-items)ここにアクセスし、parseしている。 その後parseした'変数doc'にたいしxpathを利用し、欲しいデータ(trend投稿)にアクセスし、タイトルと、リンクを取得している
40行目以降の処理では、
Shellのインスタンスを作成し、workingdirがなければ新規に作成を試みます
→git init必須
最後の四行はgit add && commit && pushの流れです。
repo = Git.open(WORKINGDIR) repo.add(".") repo.commit("#{DATE}'s qiita trends") repo.push
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!となれば成功!
アクセスメソッドについて考えてみた
記事を書く経緯
先日知り合いから
クラスメソッド内でインスタンス変数使えないはずなのに…
クラスメソッド内でeach文で回してインスタンス変数つかうとエラーが起こらなくて謎い
という質問をもらいました。 ...。。o0O...そもそもそのコード汚いのではというのは抜きです、、、w
それを聞いて僕はすぐに解説ができなかったので備忘録的にまとめます。
本記事の流れ
- そもそもクラス。インスタンスとはなにか
- クラスメソッド。インスタンスメソッド。 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
- 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"をするしかするしかないのだろうか??
また何かあれば追記していく予定です。