Rails5セットアップしてみました
Rails5が気になってきたので、ちょっとだけ試してみました。 デフォルトのWeb ServerがWEBrickからPumaになっていて「初動が爆速になったな」という印象を受けました。 (開発中のプロジェクトがモジュール多すぎて、起動が遅いというのもありますが...)
環境
OS: OSX EL Capitan 10.11.4 Ruby: 2.4.0-preview1 Ruby on Rails: 5.0.0.rc1
やること
- Rails5をインストール
- 動作確認
- slimを使いたい
参考リンク集
- Rails 5(beta) を使ってみた(前編)
- 後編がない。ウケるw
Rails5をインストール
rubyをインストール
- せっかくなので最新の2.4.0を投入。previewって書いてあるけど気にしない!
rbenv install -l rbenv install 2.3.1 #=> Downloading ruby-2.3.1.tar.bz2... #=> -> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2 #=> Installing ruby-2.3.1.. rbenv install 2.4.0-preview1
Bundlerをインストールする
- rubyの新しいバージョンをインストールしているので、bundlerもインストールしましょう。
- 既存のプロジェクトに影響を与えたくないので、適当なディレクトリに作っています。
mkdir xxxxx cd $_ rbenv local 2.4.0-preview1 gem install bundler bundler init
Railsのバージョンを探す
- インストールするために、最新のバージョンを確認します。
5.0.0.rc1
を選択することにします。(記事作成時点では、slim-railsが5.0.0.rc2に対応していなかったため)
# railsを探す gem search -ar --prerelease ^rails$ *** REMOTE GEMS *** rails (5.0.0.rc2, 5.0.0.rc1, 5.0.0.racecar1, 5.0.0.beta4, 5.0.0.beta3, 5.0.0.beta2, 5.0.0.beta1.1, 5.0.0.beta1, 4.2.6, 4.2.6.rc1, 4.2.5.2, 4.2.5.1, 4.2.5, 4.2.5.rc2, 4.2.5.rc1, 4.2.4, 4.2.4.rc1, 4.2.3, 4.2.3.rc1, 4.2.2, 4.2.1, 4.2.1.rc4, 4.2.1.rc3, 4.2.1.rc2, 4.2.1.rc1, 4.2.0, 4.2.0.rc3, 4.2.0.rc2, 4.2.0.rc1, 4.2.0.beta4, 4.2.0.beta3, 4.2.0.beta2, 4.2.0.beta1, 4.1.15, 4.1.15.rc1, 4.1.14.2, 4.1.14.1, 4.1.14, 4.1.14.rc2, 4.1.14.rc1, 4.1.13, 4.1.13.rc1, 4.1.12, 4.1.12.rc1, 4.1.11, 4.1.10, 4.1.10.rc4, 4.1.10.rc3, 4.1.10.rc2, 4.1.10.rc1, 4.1.9, 4.1.9.rc1, 4.1.8, 4.1.7.1, 4.1.7, 4.1.6, 4.1.6.rc2, 4.1.6.rc1, 4.1.5, 4.1.4, 4.1.3, 4.1.2, 4.1.2.rc3, 4.1.2.rc2, 4.1.2.rc1, 4.1.1, 4.1.0, 4.1.0.rc2, 4.1.0.rc1, 4.1.0.beta2, 4.1.0.beta1, 4.0.13, 4.0.13.rc1, 4.0.12, 4.0.11.1, 4.0.11, 4.0.10, 4.0.10.rc2, 4.0.10.rc1, 4.0.9, 4.0.8, 4.0.7, 4.0.6, 4.0.6.rc3, 4.0.6.rc2, 4.0.6.rc1, 4.0.5, 4.0.4, 4.0.4.rc1, 4.0.3, 4.0.2, 4.0.1, 4.0.1.rc4, 4.0.1.rc3, 4.0.1.rc2, 4.0.1.rc1, 4.0.0, 4.0.0.rc2, 4.0.0.rc1, 4.0.0.beta1, 3.2.22.2, 3.2.22.1, 3.2.22, 3.2.21, 3.2.20, 3.2.19, 3.2.18, 3.2.17, 3.2.16, 3.2.15, 3.2.15.rc3, 3.2.15.rc2, 3.2.15.rc1, 3.2.14, 3.2.14.rc2, 3.2.14.rc1, 3.2.13, 3.2.13.rc2, 3.2.13.rc1, 3.2.12, 3.2.11, 3.2.10, 3.2.9, 3.2.9.rc3, 3.2.9.rc2, 3.2.9.rc1, 3.2.8, 3.2.8.rc2, 3.2.8.rc1, 3.2.7, 3.2.7.rc1, 3.2.6, 3.2.5, 3.2.4, 3.2.4.rc1, 3.2.3, 3.2.3.rc2, 3.2.3.rc1, 3.2.2, 3.2.2.rc1, 3.2.1, 3.2.0, 3.2.0.rc2, 3.2.0.rc1, 3.1.12, 3.1.11, 3.1.10, 3.1.9, 3.1.8, 3.1.7, 3.1.6, 3.1.5, 3.1.5.rc1, 3.1.4, 3.1.4.rc1, 3.1.3, 3.1.2, 3.1.2.rc2, 3.1.2.rc1, 3.1.1, 3.1.1.rc3, 3.1.1.rc2, 3.1.1.rc1, 3.1.0, 3.1.0.rc8, 3.1.0.rc6, 3.1.0.rc5, 3.1.0.rc4, 3.1.0.rc3, 3.1.0.rc2, 3.1.0.rc1, 3.1.0.beta1, 3.0.20, 3.0.19, 3.0.18, 3.0.17, 3.0.16, 3.0.15, 3.0.14, 3.0.13, 3.0.13.rc1, 3.0.12, 3.0.12.rc1, 3.0.11, 3.0.10, 3.0.10.rc1, 3.0.9, 3.0.9.rc5, 3.0.9.rc4, 3.0.9.rc3, 3.0.9.rc1, 3.0.8, 3.0.8.rc4, 3.0.8.rc2, 3.0.8.rc1, 3.0.7, 3.0.7.rc2, 3.0.7.rc1, 3.0.6, 3.0.6.rc2, 3.0.6.rc1, 3.0.5, 3.0.5.rc1, 3.0.4, 3.0.4.rc1, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0.rc2, 3.0.0.rc, 3.0.0.beta4, 3.0.0.beta3, 3.0.0.beta2, 3.0.0.beta, 2.3.18, 2.3.17, 2.3.16, 2.3.15, 2.3.14, 2.3.12, 2.3.11, 2.3.10, 2.3.9, 2.3.9.pre, 2.3.8, 2.3.8.pre1, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.2.3, 2.2.2, 2.1.2, 2.1.1, 2.1.0, 2.0.5, 2.0.4, 2.0.2, 2.0.1, 2.0.0, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6, 1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.0, 0.14.4, 0.14.3, 0.14.2, 0.14.1, 0.13.1, 0.13.0, 0.12.1, 0.12.0, 0.11.1, 0.11.0, 0.10.1, 0.10.0, 0.9.5, 0.9.4.1, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.8.5, 0.8.0)
Rails5をインストールします。
- Gemfileに記載します。
source "https://rubygems.org" gem "rails", "5.0.0.rc1"
- bundle execします
bundle install --path vendor/bundle
- railsのversionを確認します。
bundle exec rails -v Rails 5.0.0.rc1
- 事が済んだのでGemfileを消しておきます。
rm Gemfile
プロジェクトの作成
bundle exec rails _5.0.0.rc1_ new .
動作確認
- まあ、いつもどおりやってみます。
- Web ServerがPumaになっています。
- いつもより早い気がします。
bundle exec rails s => Booting Puma => Rails 5.0.0.rc2 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.4.0 (ruby 2.4.0-p-1), codename: Owl Bowl Brawl * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://localhost:3000 Use Ctrl-C to stop
Rails5でslimを使う
- テンプレートエンジンをslimにします。
- 理由は簡単で、慣れてるからです。
gem 'slim-rails
require_relative 'boot' require 'rails/all' Bundler.require(*Rails.groups) module Third class Application < Rails::Application config.generators.template_engine = :slim ## here end end
早速ためしてみる
- まずはScaffoldで適当なモデルを作ります。
rails g scaffold Book name:string auther:string bundle exec rake db:migrate
localhost:3000/books
にアクセス!
ArgumentError (key must be 32 bytes): vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/message_encryptor.rb:72:in `key=' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/message_encryptor.rb:72:in `_encrypt' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/message_encryptor.rb:58:in `encrypt_and_sign' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/cookies.rb:592:in `commit' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/cookies.rb:465:in `[]=' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/session/cookie_store.rb:117:in `set_cookie' vendor/bundle/ruby/2.4.0/gems/rack-2.0.0.rc1/lib/rack/session/abstract/id.rb:353:in `commit_session' vendor/bundle/ruby/2.4.0/gems/rack-2.0.0.rc1/lib/rack/session/abstract/id.rb:224:in `context' vendor/bundle/ruby/2.4.0/gems/rack-2.0.0.rc1/lib/rack/session/abstract/id.rb:216:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/cookies.rb:613:in `call' vendor/bundle/ruby/2.4.0/gems/activerecord-5.0.0.rc2/lib/active_record/migration.rb:552:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/callbacks.rb:38:in `block in call' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/callbacks.rb:97:in `__run_callbacks__' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/callbacks.rb:750:in `_run_call_callbacks' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/callbacks.rb:90:in `run_callbacks' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/callbacks.rb:36:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/executor.rb:12:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/remote_ip.rb:79:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call' vendor/bundle/ruby/2.4.0/gems/web-console-3.3.0/lib/web_console/middleware.rb:131:in `call_app' vendor/bundle/ruby/2.4.0/gems/web-console-3.3.0/lib/web_console/middleware.rb:28:in `block in call' vendor/bundle/ruby/2.4.0/gems/web-console-3.3.0/lib/web_console/middleware.rb:18:in `catch' vendor/bundle/ruby/2.4.0/gems/web-console-3.3.0/lib/web_console/middleware.rb:18:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call' vendor/bundle/ruby/2.4.0/gems/railties-5.0.0.rc2/lib/rails/rack/logger.rb:36:in `call_app' vendor/bundle/ruby/2.4.0/gems/railties-5.0.0.rc2/lib/rails/rack/logger.rb:24:in `block in call' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/tagged_logging.rb:70:in `block in tagged' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/tagged_logging.rb:26:in `tagged' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/tagged_logging.rb:70:in `tagged' vendor/bundle/ruby/2.4.0/gems/railties-5.0.0.rc2/lib/rails/rack/logger.rb:24:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/request_id.rb:24:in `call' vendor/bundle/ruby/2.4.0/gems/rack-2.0.0.rc1/lib/rack/method_override.rb:22:in `call' vendor/bundle/ruby/2.4.0/gems/rack-2.0.0.rc1/lib/rack/runtime.rb:22:in `call' vendor/bundle/ruby/2.4.0/gems/activesupport-5.0.0.rc2/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/executor.rb:12:in `call' vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/static.rb:136:in `call' vendor/bundle/ruby/2.4.0/gems/rack-2.0.0.rc1/lib/rack/sendfile.rb:111:in `call' vendor/bundle/ruby/2.4.0/gems/railties-5.0.0.rc2/lib/rails/engine.rb:522:in `call' vendor/bundle/ruby/2.4.0/gems/puma-3.4.0/lib/puma/configuration.rb:224:in `call' vendor/bundle/ruby/2.4.0/gems/puma-3.4.0/lib/puma/server.rb:569:in `handle_request' vendor/bundle/ruby/2.4.0/gems/puma-3.4.0/lib/puma/server.rb:406:in `process_client' vendor/bundle/ruby/2.4.0/gems/puma-3.4.0/lib/puma/server.rb:271:in `block in run' vendor/bundle/ruby/2.4.0/gems/puma-3.4.0/lib/puma/thread_pool.rb:114:in `block in spawn_thread' Rendering vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout Rendering vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb Rendered vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (1.8ms) Rendering vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb Rendered vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.2ms) Rendering vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb Rendered vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.9ms) Rendered vendor/bundle/ruby/2.4.0/gems/actionpack-5.0.0.rc2/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (56.2ms)
- 秘密鍵は32byteにしろっていうことだろうけど、どこで設定しているのだろうか。
- わからんが、直接設定したら動いた(笑)
- だめだよね。。。解決策を知ってたら教えて下さい。
def initialize(secret, *signature_key_or_options) options = signature_key_or_options.extract_options! sign_secret = signature_key_or_options.first # @secret = secret @secret = "12345678901234567890123456789012" # here @sign_secret = sign_secret @cipher = options[:cipher] || 'aes-256-cbc' @verifier = MessageVerifier.new(@sign_secret || @secret, digest: options[:digest] || 'SHA1', serializer: NullSerializer) @serializer = options[:serializer] || Marshal end
検索用フォームのオブジェクトをnewするときは#attributes
検索用フォームのオブジェクトをnewするときは#attributesを使うと良さそう。
class HogeSearchForm include ActiveModel::Model attr_accessor :id, :price, :number, :tel, :tel_search_index, end
@hoge_search_form = HogeSearchForm.new(@hoge.attributes)
参考にさせていただいたページ
font awesome update
awesomeのdocをみてて、使えないフォントとかがある場合はアップデートすると解決するみたいです。
font awesomeのアップデート
bundle update rails-assets-fontawesome
haml placeholderで改行する
placeholderのテキストを改行したい。
改行したいところに
を記載することで、実現できるとのことだったが動作しなかった。
#=> 改行されなかった = text_area_tag :hoge, '', class: 'form-control', rows: 5, placeholder: '一行目 二行目'
cssを使ってねじ込む方法があるらしい。 こちらは動作しました。
= text_area_tag :hoge, '', class: 'form-control hoge', rows: 5, placeholder: '一行目' .hoge::-webkit-input-placeholder::after { display: block; content: "二行目"; }
3行目以降は改行したいところに\A
でいけるみたい。
書いてみて思ったけど、クラス指定じゃなくてID指定にしたほうがいいよね。
参考させていただきました、ありがとうございます。
N+1の原因
N+1の原因
includesしていない
常識なので、割愛
includesしているが、order、allなどActiveRecordの操作をしている
対策
allやorderを代替手段に変更する
ActiveRelationが複数形のとき、1つ1つのレコードがhas_oneの関連先を参照している
- http://washiiku.hatenablog.com/entry/2014/01/02/012801 has_manyはN+1のにほい
シェルでの入力操作
control + w カーソルの位置から、前のスペースまでを削除 control + k カーソルの位置から、文末までを削除 control + y 行頭からカーソル位置までを削除 control + l スクリーン再描画