railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

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を使いたい

参考リンク集

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)

参考にさせていただいたページ

blog.enogineer.com

techracho.bpsinc.jp

qiita.com

qiita.com

haml placeholderで改行する

placeholderのテキストを改行したい。

改行したいところに&#13;&#10;を記載することで、実現できるとのことだったが動作しなかった。

#=> 改行されなかった
= text_area_tag :hoge, '', class: 'form-control', rows: 5, placeholder: '一行目&#13;&#10;二行目'

cssを使ってねじ込む方法があるらしい。 こちらは動作しました。

= text_area_tag :hoge, '', class: 'form-control hoge', rows: 5, placeholder: '一行目'

.hoge::-webkit-input-placeholder::after {
    display: block;
    content: "二行目";
}

3行目以降は改行したいところに\Aでいけるみたい。

書いてみて思ったけど、クラス指定じゃなくてID指定にしたほうがいいよね。


参考させていただきました、ありがとうございます。

HTML5のplaceholder属性のスタイル指定 | 富永日記帳

9-bb.com

N+1の原因

N+1の原因

includesしていない

常識なので、割愛

includesしているが、order、allなどActiveRecordの操作をしている

対策

allやorderを代替手段に変更する

ActiveRelationが複数形のとき、1つ1つのレコードがhas_oneの関連先を参照している

シェルでの入力操作

control + w カーソルの位置から、前のスペースまでを削除 control + k カーソルの位置から、文末までを削除 control + y 行頭からカーソル位置までを削除 control + l スクリーン再描画

MOVION.net » [Linux]シェルでの入力操作(Ctrl-U,Ctrl-W)など

coffee scriptにくっついてる@変数はなんだろう?

coffee scriptにくっついてる@変数はなんだろう?

  • @はthis.に展開される。
  • @hogeはthis.hogeとなる

higelog.brassworks.jp