rails初学者がよくわからず書いていたことについて

railsとは何ぞやって人向け

  • railsの特徴のおさらい
  • CoC
  • DRY
  • REST
  • MVC

rails初心者が躓きそうな点

  • 命名規則について
  • rake routes(どうやってみるの〜〜〜)
  • gem(なんとなく使っているけど実態がわからない。。。)
  • rails helper (なんか聞き覚えはあります。。。。ね!w)

  • params (たまにみる。params.permitって何!?!!w)

  • strong parameters(んーーとりあえず使っているけどよくわからないてなってたw)
  • debug(デバッグ手法が難しい、、、)

railsの特徴

通称railsことRuby on railsオープンソースのWebアプリケーションフレームワークです

上記の2つを守ることで高速開発ができる...とされています! (チーム開発をする時に真価を発揮!!!)

Convention over Configuration

  • 設定 より 規約
    「規約」、言い換えれば「初期値の設定」
    あらかじめrailsによって用意されている規約に従ってアプリ開発をすることでコーダーが実際に記述する量が減ります!。

 ex)モデルの命名規則

例えば、"rails g model product"というgeneratorコマンドを実行すると。あらかじめ決められている規則にしたがって下記のようになります。 テーブル名がproducts(複数形)、モデルのクラス名はProduct(単数形)、記述するファイルはproduct.rb(app/models以下)となります。

このように決まっている設計思想に従うことで無駄な記述が減ります。

 メリット

  • 設定ファイルを記述する必要がない(ほとんど)
    上記のルールに従うことで本来であれば”〇〇モデルは〇〇sテーブルを参照する”と言ったような記述が必要になるがそれが不要になる
  • 共同開発時、コードの解説が最小限で済む
    お互いがrailsのルールを知っていればおおよそのチーム内での決まりごとが決まっているのと同じ意味になります!

Don't Repeat Yourself

  • 繰り返しを避けよ。(そのままですねw)

DRYは「DRY原則」とよばれ、railsをつかったwebアプリケーションでは同じ記述何回も記述するのは避けることが推奨されています。 同じことソースコードや設定ファイルの中で繰り返し記述するのは仕様変更やbugの原因になってしまうからです。

DRYを意識することで効率よく品質の高いアプリケーション開発ができます 作成できます。

  • なんでわざわざDRYにしなきゃいけないの??
    全部コーディングすればええやん?って方は下記をご覧ください

参考 1.怠慢(Laziness) 2.短気(Impatience) 3.傲慢(Hubris)

プログラマの三大美徳ともいわれるこの思想。
世間からすればダメ人間と思われるかも?しれない。 でもこれができるエンジニアはエンジニア界から崇められる...らしい?

REST

  • REpresentational State Transfer 
  • すべてのリソースに一意となる識別子がある
    (雑すぎfixme)

MVCとは

MVCとはそもそもなんなの? →railsだけがMVCじゃないよ。
Model View Controllerの三つの要素から構成されるものです。
それぞれが各々の仕事のように役割分担をするから、便利だよねって考え方。 実際は下記のような分担をします

  • M...model
    DBとrailsの中間に位置する。DBからの値を取り出したりしてます。ビジネスロジックを担う部分
  • V...view
    modelやcontrollerで用意したデータ等を駆使して利用者に、見せる部分
  • C...controller
    modelのロジック呼び出し。必要なviewの選択。modelとviewの中間にあたります

wiki 引用
MVC(Model View Controller モデル・ビュー・コントローラ)は、ユーザーインタフェースをもつアプリケーションソフトウェアを実装するためのデザインパターンである。 アプリケーションソフトウェアの内部データを、ユーザーが直接参照・編集する情報から分離する。そのためにアプリケーションソフトウェアを以下の3つの部分に分割する。


命名規則

これはCoCに相当する考え方の部分に当たります
(todo:表作成)

rake routes

      Prefix Verb   URI Pattern                    Controller#Action
      groups GET    /groups(.:format)                groups#index
             POST   /groups(.:format)                groups#create
   new_group GET    /groups/new(.:format)            groups#new
  edit_group GET    /groups/:id/edit(.:format)       groups#edit
       group PATCH  /groups/:id(.:format)            groups#update
             PUT    /groups/:id(.:format)            groups#update

こういった結果の時の読み方。No route matchesとかなったりしても冷静になればイケる
実はrake routesしたときの PrefixVerb,URIPattern,Controller#Action、この記述が肝。
- PrefixVerb... 特定のHTTPメソッド (GET、POST、PATCH、PUT、DELETEなど)を表す部分

  • URIPattern...どのURLでアクセスするのか。という部分。
    localhostで開発しているなら「localhost//」の「/」のところ。 ex)一行目を表すURLというのはrake routes上では→ /groups(.:format) URLは"localhost/groups"になります。
    逆に"localhost/groups"の時はrake routesの「/groups(.:format)」を見るということです

  • Controller#Action... どのコントローラ、アクションなのかを判断する。
    左の二つが一致しているものを見つけたらこの部分を見てどこのアクションかを判断します。

ex) GETメソッドでURLが"/groups"だったら、「groups#index」これが参照され、groupscontrollerのindexアクションが呼ばれます

リソースフルルーティングでは 1つのアクションに対して、データベース上での特定のCRUD (Create/Read/Update/Delete) にもなります。 上記の上二つ。URLは同じでもhttpメソッドが違うために、別のアクションを呼んでいる

gem

gem は、Ruby用のパッケージ管理ツールになります。

Ruby用ライブラリのインストール、アンインストール、バージョン管理などを簡単に実行することができます。
gem自体はプログラミング言語Rubyのファイルに付属されていて、無料で誰でも使うことができるソフトになります。
余談ですが。gemの正式名称はRubyGemsです
例えば下記のgemを使うと

devise

  • loginとか、User管理が簡単にできるよね
  • facebook認証も手軽に

Mechanize

  • Scrapingするのに便利だね
  • webからデータを集める際に便利!

kaminari

  • ページネーション便利だね
  • 多くのデータを複数のページに跨らせることはUI,UX的にも大事
  • bootstrapと組み合わせればそんなにダサくないですw

rails helper

Viewファイルにて複雑なロジックを簡単に記述できる

form_tag

検索の時に頻繁に使う。
頑張ればform_forみたいなことできるけど。頑張る必用もないよね...(form_forが楽ならそっち使いましょう)

form_for

モデルに紐づいている場合に利用するとか言われています。 投稿フォームとか、DBに値を突っ込むときに使うイメージ

form_with

https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502 rails 5系から新規参入したヘルパー。これがなかなか協力

link_to

HTTPメソッド指定してリンクを作れる prefixを使用して記述できる

etc(まだまだたくさんある)

params

URLから送られてきた値やフォームで入力した値をparams[:パラメータ名]で取得する
rails4系ではpryで'params'と取得ができていたが、「rails5」からは取得できなくなったっぽい?

params[:パラメータ名] フォームの内容を受け取ったりする時に上記のような書き方をしますね

メリット
  • リンクによるパラメータの受け渡し
  • フォームによるパラメータの受け渡し

strong parameters

マスアサイメント脆弱性の対策としてrails4よりこれが必須になった。 簡単にまとめられそうもないので、下記参考にしていただければと思います。 参考

debug

gem "pry-rails" を入れることで rails console 上でpryコンソールが起動する。 (pry-rails を入れるまでは irb が起動する)

  • Rails console で Pry が起動するようになる
  • Rails console で help と打つと、使えるコマンドがわかる
  • show-routes,ls ...etc コマンドが console上 で使えるようになる
  • binding.pry を挟むとその位置で処理を止めてデバッグできるようになる
参考書籍

改訂3版 基礎 Ruby on Rails 基礎シリーズ パーフェクトRuby on Rails

この記事は私自身がrails開発を初めて数ヶ月の間に疑問に思ってたことを改めてまとめたものです。

(pry) output error: #<ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash> と怒られた

rails 5. 1.4 ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] の環境でform_forを利用して開発している時に見かけたエラー。

controllerの処理の中でbinding.pryを実行し、’params’と確認すると、

(pry) output error: #<ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash>
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal/strong_parameters.rb:265:in `to_h'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal/strong_parameters.rb:282:in `to_hash'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/awesome_print-1.8.0/lib/awesome_print/formatter.rb:118:in `convert_to_hash'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/awesome_print-1.8.0/lib/awesome_print/formatter.rb:47:in `awesome_self'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/awesome_print-1.8.0/lib/awesome_print/formatter.rb:28:in `format'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/awesome_print-1.8.0/lib/awesome_print/inspector.rb:115:in `unnested'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/awesome_print-1.8.0/lib/awesome_print/inspector.rb:74:in `awesome'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/awesome_print-1.8.0/lib/awesome_print/core_ext/kernel.rb:10:in `ai'
/Users/fumihumi/project/mercari/.pryrc:4:in `block in __pry__'
/Users/fumihumi/project/mercari/.pryrc:23:in `block in enable_output_method'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:367:in `show_result'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:336:in `block in handle_line'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_class.rb:395:in `critical_section'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:335:in `handle_line'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:243:in `block (2 levels) in eval'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:242:in `catch'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:242:in `block in eval'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:241:in `catch'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_instance.rb:241:in `eval'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/repl.rb:77:in `block in repl'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/repl.rb:67:in `loop'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/repl.rb:67:in `repl'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/repl.rb:38:in `block in start'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/input_lock.rb:61:in `__with_ownership'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/input_lock.rb:79:in `with_ownership'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/repl.rb:38:in `start'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/repl.rb:13:in `start'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-0.11.2/lib/pry/pry_class.rb:192:in `start'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-byebug-3.5.0/lib/byebug/processors/pry_processor.rb:115:in `block in resume_pry'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-byebug-3.5.0/lib/byebug/processors/pry_processor.rb:28:in `block in run'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-byebug-3.5.0/lib/byebug/processors/pry_processor.rb:27:in `catch'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-byebug-3.5.0/lib/byebug/processors/pry_processor.rb:27:in `run'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-byebug-3.5.0/lib/byebug/processors/pry_processor.rb:111:in `resume_pry'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pry-byebug-3.5.0/lib/byebug/processors/pry_processor.rb:70:in `at_return'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/byebug-9.1.0/lib/byebug/context.rb:128:in `at_return'
/Users/fumihumi/project/mercari/app/controllers/products_controller.rb:20:in `product_params'
/Users/fumihumi/project/mercari/app/controllers/products_controller.rb:12:in `create'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/abstract_controller/base.rb:186:in `process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal/rendering.rb:30:in `process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/callbacks.rb:131:in `run_callbacks'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/abstract_controller/callbacks.rb:19:in `process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal/rescue.rb:20:in `process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/notifications.rb:166:in `block in instrument'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/notifications.rb:166:in `instrument'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal/params_wrapper.rb:252:in `process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activerecord-5.1.4/lib/active_record/railties/controller_runtime.rb:22:in `process_action'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/abstract_controller/base.rb:124:in `process'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionview-5.1.4/lib/action_view/rendering.rb:30:in `process'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal.rb:189:in `dispatch'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_controller/metal.rb:253:in `dispatch'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/routing/route_set.rb:31:in `serve'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/journey/router.rb:50:in `block in serve'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/journey/router.rb:33:in `each'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/journey/router.rb:33:in `serve'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/routing/route_set.rb:834:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/omniauth-1.4.2/lib/omniauth/strategy.rb:186:in `call!'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/omniauth-1.4.2/lib/omniauth/strategy.rb:164:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bullet-5.6.1/lib/bullet/rack.rb:10:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/warden-1.2.7/lib/warden/manager.rb:36:in `block in call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/warden-1.2.7/lib/warden/manager.rb:35:in `catch'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/warden-1.2.7/lib/warden/manager.rb:35:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rack-2.0.3/lib/rack/etag.rb:25:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rack-2.0.3/lib/rack/conditional_get.rb:38:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rack-2.0.3/lib/rack/head.rb:12:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rack-2.0.3/lib/rack/session/abstract/id.rb:232:in `context'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rack-2.0.3/lib/rack/session/abstract/id.rb:226:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/cookies.rb:613:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activerecord-5.1.4/lib/active_record/migration.rb:556:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/callbacks.rb:26:in `block in call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/callbacks.rb:97:in `run_callbacks'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/callbacks.rb:24:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/executor.rb:12:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/better_errors-2.4.0/lib/better_errors/middleware.rb:84:in `protected_app_call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/better_errors-2.4.0/lib/better_errors/middleware.rb:79:in `better_errors_call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/better_errors-2.4.0/lib/better_errors/middleware.rb:57:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/web-console-3.5.1/lib/web_console/middleware.rb:135:in `call_app'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/web-console-3.5.1/lib/web_console/middleware.rb:28:in `block in call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/web-console-3.5.1/lib/web_console/middleware.rb:18:in `catch'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/web-console-3.5.1/lib/web_console/middleware.rb:18:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/rack/logger.rb:36:in `call_app'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/rack/logger.rb:24:in `block in call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:69:in `block in tagged'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:26:in `tagged'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:69:in `tagged'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/rack/logger.rb:24:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/quiet_assets.rb:13:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/request_id.rb:25:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rack-2.0.3/lib/rack/method_override.rb:22:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rack-2.0.3/lib/rack/runtime.rb:22:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/executor.rb:12:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.1.4/lib/action_dispatch/middleware/static.rb:125:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/rack-2.0.3/lib/rack/sendfile.rb:111:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/railties-5.1.4/lib/rails/engine.rb:522:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/puma-3.10.0/lib/puma/configuration.rb:225:in `call'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/puma-3.10.0/lib/puma/server.rb:605:in `handle_request'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/puma-3.10.0/lib/puma/server.rb:437:in `process_client'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/puma-3.10.0/lib/puma/server.rb:301:in `block in run'
/Users/fumihumi/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/puma-3.10.

と、こんなエラーが吐かれてしまった。。。。。。。。。。 なぜだ。。。。。rails4系では問題なくみれていたのだが、、、、

解決はしていないが、対処方法としては rails server のパラメータを頑張って読んで、そこから必要なデータを読み解くしかない?w

あとは rails dashboardとかを利用して出力結果をパースするか。

fumihumi.hatenablog.com

ちなみにrails dashboardを使うとこんな感じになる

  authenticity_token : Aevh******************sAoM/AZRL*********************GHAW06V+==
              commit : ????????
             product : Object
     product[detail] : test message
       product[name] : 1039
      product[price] : 50000
     product[status] : excellent
                utf8 : ✓

おそらくrails5系からセキュリティ面の考慮が入りこの仕様になったのだと思うが、、、にしてもめんどくさい。。。。。。。 なにかいい方法はないのだろうか?

追記:デバッグ用のgemのどれかが悪さをしているっぽい。

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '~> 2.13'
  gem 'selenium-webdriver'
  gem 'pry-rails'    # rails cの対話式コンソールがirbの代わりにリッチなpryになる
  # gem 'pry-doc'      # pry中に show-source [method名] でソース内を読める
  # gem 'pry-byebug'   # binding.pryをソースに記載すると、ブレイクポイントとなりデバッグが可能になる
  # gem 'pry-stack_explorer' # pry中にスタックを上がったり下がったり行き来できる

  # gem 'hirb'         # モデルの出力結果を表形式で表示する
  # gem 'hirb-unicode' # hirbの日本語などマルチバイト文字の出力時の出力結果がすれる問題に対応
  # gem 'rails-flog', require: 'flog' # HashとSQLのログを見やすく整形
  gem 'better_errors'     # 開発中のエラー画面をリッチにする
  # gem 'binding_of_caller' # 開発中のエラー画面にさらに変数の値を表示する
  # gem 'awesome_print'     # Rubyオブジェクトに色をつけて表示して見やすくなる
end

もともと利用していた、gemをコメントアウトしたら一応動くようになった。。。。

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自動起動設定等がしたい場合はここで調べてみてください〜