ubuntu 16に lamp 環境の構築(備忘録)

LAMP環境構築のメモ (後日centOSの場合も書く予定です)

sudo apt-get -y  install apache2 
sudo apt-get -y  install php php-gd php-mysql libapache2-mod-php
sudo apt-get -y  install mysql-server
````
install自体はこれだけ。
確認はそれぞれ ’-v'で

apache2 -v php -v mysql -u root -p

でうまくできればおk!
'mysql -v'は passwordがあるとうまくいかない?みたいなのでログインで代用しました。

gem install mysql2 -v '0.4.9'ができない (ubuntu)

先日、(同日だけど)ubunturails 環境構築をした際のメモ。

fumihumi.hatenablog.com

mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.

  • エラーの命令に従う

    sudo apt-get -y install libmysqlclient-dev

できた。w

cd /{app}

bundle install

rails s

-> localhost:3000

gyazo.com

以上メモです

ubuntu 16 に ruby on rails の環境を整える(備忘録)

タイトル通り、rails 環境構築のコマンドをメモって行くもの

  1. まずは必要そうなものを"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
  1. 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

  1. ~.bash_proifleに設定を追記  追記するのは下記記述。これをvim で書くか、もしくはその下にある "eval ~"のコマンドでも良い

vimでいじるのであれば、

eval "$(rbenv init -)"

コマンドで実行するのであれば。(下記:evalコマンド)

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

その後。設定の読み込みをするため

source ~/.bash_profile

which rbenv としてpathが出力されればおk

  1. 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になってれば成功

  1. 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 がはいっていたのでそれが返却されました。
  1. おわり。

  2. rails new sample -d mysql (-d optionはdatabaseを指定するもの。) としてうまくいけば大丈夫かと

  3. 余談

  4. 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.

fumihumi.hatenablog.com


参考記事 rbenv で ruby の環境を整える - Qiita

Railsのバージョンを指定してinstallする方法 - Qiita

ruby でqiitaのトレンド収集スクリプト書いてみた

github.com

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!となれば成功!

自分は自動起動設定をしていないのでここで終了だが、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"をするしかするしかないのだろうか??

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