Ruby

みなさんこんにちは!

今回はRails4+Unicorn+Nginx環境で「Error with Maximum file multiparts in content reached」というエラーがログに出ていたときの対処法を書きます!

このエラーの内容としては「ファイルアップ上限達してるよふぇぇえ」って感じなのでその制限を取っ払うなり上限アップするなりして対処しましょう!

解決方法はこちらにあるように

config/multipart_part_limit.rb というファイルを作ってその中に

Rack::Utils.multipart_part_limit = 0

と書くことで上限が取っ払われます。

ただこうすることで大量のファイルを1度にアップされると次のページに遷移するのに時間がかかってしまうため、それ用に対策を打つ必要が別途ありそうです。

また、ENV[‘RACK_MULTIPART_PART_LIMIT’] の設定が優先されるそうなのでunicornのタスクの中で指定等してあげるとファイルで指定せずとも設定出来るそうです。

Read more

8659335288_b74570bd1b_n

みなさんこんにちは! Rails4で例えばViewファイルのメニューで、あ、このURLのときはここにclass追加したいな、とか表示変えたいな!っていうことが少なからずあると思います!いやある!

そんなときにどうすればいいのかを軽く紹介します!

そんなときはURLHelperとして実装されているcurrent_page?メソッドを使いましょう!

使い方は簡単!

current_page?(root_path)
// root_pathかどうか判定

current_page?(controller: 'posts', action: 'index')
// controller, actionで判定

current_page?('http://google.com')
// 文字列で判定

こんな感じで判定出来ます!直感的ですね!

Read more

14094488767_42c93bf957

photo credit: Hauptbahnhof, Central Train Station, Hamburg – Train Lines via photopin (license)

こんにちは!

長い文字を切り取って「…」を付けたくなるとき、いっぱいありますよね! 今回はRailsでそれをやる方法を紹介します!

truncateメソッドを使おう

ActiveSupportでStringクラスにtruncateメソッドが追加されています。 ここで注意してほしいのは、”たーんけーと”じゃなく、”とらんけーと”だということ。 10分くらい、なんで動かないんだろう????(゜∀゜)ってなったのは僕だけですか?

separatorを指定するとキリのいい所で文章を切ってくれる omissionを指定すると「…」以外を文章の後ろに追加することが出来る

"This is a test case.".truncate(10)
# => "This is a ..."
"This is a test case.".truncate(10, separate: ' ')
# => "This is a ..."
"This is a test case.".truncate(10, omission: '...continued')
# => "This is a ...continued"

これで完璧! 最近はCSS3のtext-overflowプロパティでも実装出来るけど、どうなんだろう。 CanIUseを見る限りは97%以上は使えるぽいからそろそろCSSで実装してもいいのかな。

またhelperとしても提供されているので以下のようにしてもOK

# defaultだと30文字で切り取られる

# => "This is a test case...."

# 文字数の指定をする場合

# => "This is a ..."

# separator指定

# => "This is a test case...."

# omission指定

# => "This is a ...continued"

最後に

Rails楽しい!!

参考

API RubyOnRails Document – truncateActiveSupoprt API RubyOnRails Document – truncate

Read more

5807852400_6cb1047a04

photo credit: Gerbera via photopin (license)

みなさんこんにちは! 最近はRails4に夢中の@DAI199です。

今日はRailsを運用する中で、どんどん大きくなるログファイルってどうしたらいいんだろう?と思って調べたので記事書きます!

今回の環境は

  • Rails4.2

で動作確認しています。

こういう問題の解決策

どんどん大きくなるログファイル。圧迫される容量。 初期の無用なデータ。 これらをある程度消去していったりして管理したいですよね。

これを解決するために、「ログローテーション」という方法で解決することが出来ます。 もちろんフルスタックのRailsなので、ログローテーションを設定することが出来ます!

Railsで設定する方法

それではログローテーションを設定しましょう。

内容はとても簡単で、もしproduction環境において反映させたい場合は

#{Rails.root}/config/environments/production.rb

config.logger = Logger.new("log/production.log", 5, 10 * 1024 * 1024)

上記のように設定すると、10MBのログファイルが出来たら、production.log.0、production.log.1のように5つまでファイルを作成してくれる模様。 5ファイルを超えたら勝手に削除してくれます。便利!!

容量じゃなくて日程別に分けたい!

というときは下記のように設定しましょう。

#{Rails.root}/config/environments/production.rb

config.logger = Logger.new("log/production.log", 'daily')
config.logger = Logger.new("log/production.log", 'weekly')
config.logger = Logger.new("log/production.log", 'monthly')

こうやって設定するとproduction.log.20150803 のようにわけて保存してくれます!これまた便利!

最後に

実際に運用し始めると予想外の所で詰まったりして色々大変ですが、だからこそ楽しかったりしますよねw これからもRailsさんお世話になりますー((´^ω^))

参考記事

Read more

みなさんこんにちは!

最近Rubyのバージョン管理システムであるrbenvをインストールすることが多いんですが、もっと簡単に楽にインストール出来ないかなぁと思ってたら、遅ればせながら、anyenvというものがあるようです。

anyenv

これを使えばrbenvはもちろんのこと、phpやperl, python, nodejs等多くのバージョン管理システムを簡単に入れることが出来ます。

それではインストールしてみましょう。

anyenvをインストール

それではぱぱっとインストールしちゃいましょう。

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

rbenvをインストール

rbenvをインストールします。

$ anyenv install rbenv
$ exec $SHELL -l

Ruby2.2.0をインストール

ここからはrbenvの使い方と変わりません。rbenvでrubyの最新バージョンをインストールしましょう。

$ rbenv install -l # インストール出来るRubyのバージョンを確認
$ rbenv install -v 2.2.0
$ rbenv global 2.2.0

ついでにrbenv rehashするのが面倒なのでrbenv rehash gemを入れておきましょう。

$ gem install rbenv-rehash
$ rbenv rehash # これでrbenv rehashしなくてもよくなった!

anyenv-updateをインストールしてバージョン管理システムをupdate出来るようにしよう

これだけでも十分便利なanyenvですが、anyenv updateコマンドを使えるようにして、それぞれのバージョン管理システムをupdate出来るようにしましょう!

これも簡単!Installationを参考に。

$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
$ anyenv update rbenv # rbenvのバージョンアップが楽に!

最後に

anyenvをインストールしておくことで.bash_profileの中身が短くなっていいですね。 色んな言語のバージョン管理システムを楽にインストール出来ることで色んな言語を簡単に試せそうです。

パーフェクトRuby (PERFECT SERIES 6)
Rubyサポーターズ すがわら まさのり 寺田 玄太郎 三村 益隆 近藤 宇智朗 橋立 友宏 関口 亮一
技術評論社
売り上げランキング: 11,067
Read more

こんにちは!

RailsAdminで色々カスタマイズしようとしたり、jsのライブラリを読み込もうとしたときになぜか動かない・・・ 公式を見る限り、

・app/assets/stylesheets/rails_admin/custom/theming.scss ・app/assets/stylesheets/rails_admin/custom/variables.scss ・app/assets/stylesheets/rails_admin/custom/mixins.scss ・app/assets/javascripts/rails_admin/custom/ui.js

にファイルを置いて、それぞれに対して書いていけば、動くって書いてあるのに動かない・・・

また、ui.jsはmanifest fileとして動くはずなのに動かない・・・なんで・・・

と思って色々検索してたら、ここのページに解決法がのってました。

以下のコマンドを実行!

$ be rake tmp:clear

サーバーも一応再起動してアクセスすると・・・動くーー!manifestとしてもちゃんと動くーー!

てことで解決しました!わーいヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ

色々役に立ちそうなことがたくさん書いてあるので必携かも

パーフェクト Ruby on Rails
すがわら まさのり 前島 真一 近藤 宇智朗 橋立 友宏
技術評論社
売り上げランキング: 31,159
Read more

最近はRubyOnRailsをごりごりいじって色々やってます。 その中でrails_admin gemを導入する機会があったのですが、結構つまづいてしまったので記録として残しておこうと思います。

Rails – 4.1.0 Ruby – 2.1.0 rails_admin – 0.6.2 devise – 3.2.4

まずはGemfileに以下を追記します。

gem 'rails_admin'
gem 'devise'

rails_adminでは管理者ログインとしてDevise gemを使うことが出来ます。 その他にもSorceryやManuallyというgemも使えるようですが、自分はDevise gemしか使ったことないのでDeviseにします。

そしてインストールしてdeviseをインストールします。

$ bundle install
$ bundle exec rails g devise:install

色々出てきますが、フラッシュメッセージの部分だけ修正します。

app/views/layouts/application.html.erb



  Cafe
   true %>
   true %>
  


追記した部分を色でつけておきました。

次はmodelを作ります。admin_user というmodelでも作りますか

$ rails g devise admin_user

管理者は直接DBにデータを入れたいため、:registerableと:recoverableを消しておきます。

app/models/admin_user.rb

class AdminUser 

generateしたときに生成されたマイグレーションファイルの中からもregisterableとrecoverableは外しておきます。

db/migrate/****_devise_create_admin_users.rb

class DeviseCreateAdminUsers 

ここまで出来たらマイグレーションしておきましょう。

$ bundle exec rake db:migrate

次はようやくrails_adminをがちゃがちゃします。インストールしましょう。そのときにどのパスで入れるようにするか聞かれるので今回は /admin_user でやってみたいと思います。

$ rails g rails_admin:install
           ?  Where do you want to mount rails_admin? Press 
 for [admin] > admin_user

でここからdeviseと連携させます。色々な記事では自動的に連携されてるっぽいのですが、僕の場合はそうはいかなかったので手動でやります。

config/initializers/rails_admin.rb

RailsAdmin.config do |config|

  ### Popular gems integration

  ## == Devise ==
  config.authenticate_with do
    warden.authenticate! scope: :admin_user
  end
  config.current_user_method(&:current_admin_user)

  ## == Cancan ==
  # config.authorize_with :cancan

  ## == PaperTrail ==
  # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0

  ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration

  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app

    ## With an audit adapter, you can add:
    # history_index
    # history_show
  end
end

ここで大切なのは今回、admin_userとして使用するため、シンボルを :admin_user に変更、9行目の部分も current_admin_user に変更しました。まだこういうとこ慣れてないって感じます・・・

んで次はrouteをちょっといじります。デフォルトの状態ではコンフリクトしてしまうので順番を上下逆にします。 4行目と5行目を逆にして devise_for が上にくるようにしましょう。

Rails.application.routes.draw do
  root 'home#index'

  devise_for :admin_user
  mount RailsAdmin::Engine => '/admin_user', as: 'rails_admin'

少し長かったですが、これで終わりです!あとはコンソールでユーザー作って実際にログインしてみましょう!

これで localhost:3000/admin_user にアクセス出来るのでアクセスしましょう!うまくいってればログイン画面に飛ばされ、ログインすると綺麗な画面が出てくるはずです!!

色々高機能らしいrails_admin、これから色々触ってみます!!

頑張って読んでます。面白い!

メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス
売り上げランキング: 26,917
Read more

こんにちは!

Rubyで色々遊んでるんですが、本当に大したことじゃないところで?ってなることが多いです。 まぁ最初はそんなもんだと思うのですが、ちょっとずつメモしていこうかと。

よくあるのが、変数内の文字列が空じゃなかったら、みたいな条件分岐。 これPHP脳だと!empty($name)みたいにしちゃうのですが、なんか違うなぁと。

なので軽く調べてみるとRubyにはunlessというifの逆があると。

じゃぁこれ使って以下のように条件分岐すればいいじゃん、みたいな。

name = "tagami"
friend = "toshiya"
# 2つの変数が両方空じゃなかったら
unless name.empty? && friend.empty?
  # 色々記述
else
  # 1つでも空があった場合の記述
end

とても当たり前のことなのでブログに書くことすらためらったのですが、一応メモ変わりに。

※2月21日15:04編集 untilじゃなくてunless。泣ける

初めてのRuby
初めてのRuby
posted with amazlet at 14.02.07
Yugui
オライリージャパン
売り上げランキング: 103,573
Read more

こんにちは!

最近隣のエンジニアやいつかどこかの記事でSlimやばい的なことを聞いた気がするのでじゃぁやるか!って完全にノリで今回Slimに入門してみます。

そもそもSlimとは??

Ruby製のテンプレートエンジン。 軽くて速く、また習得するのも容易。

Slimをやるときにとりあえず覚えておくといいのは

  • 拡張子は.slim
  • インデントの深さで入れ子構造を表現する
  • 通常のHTMLから, >, />を取り除くと基本OK

それでは実際のコードを見てみましょう。

とその前にSlimをインストールしましょう。

gem install slim

今回検証に使った環境は以下です。

  • Ruby・・・2.1.0
  • Gem・・・2.2.0
  • Slim・・・2.0.2

以下がSlimのサンプルコードです

doctype html
html
  head
    title Slim Example
    meta name="keywords" content="slim example"

  body
    h1 Slim Example

    #content
      p Test Case

    - until users.empty?
      table#users
        - for user in users
          tr
            td.name = user.name
            td.age = user.age
    - else
      p Not found.

これが変換されると以下のようになります。





Slim Example
  



Slim Example

Test Case

Tagami 23

それでは1つずつ理解していきましょう。

基本的には, >, />をなくした形

head内にあるmetaとかを見ればわかると思いますが、基本は<, >, />をなくした形です。

あとCSSの記述方法(idの指定とかclassの指定とか)も使うことが出来るのがこの例でわかると思います。 ちょっと覚えなければならないのがRubyのsyntaxを使用したいときです。

Rubyのsyntaxを使いたい場合は -(ハイフン) を使用する

例の中に条件分岐やループ文があったと思うのですが、Rubyのsyntaxを使いたい場合は-(ハイフン)を使ったあと半角スペースを1つあけてRubyを書いていけば動きます。

- until users.empty?
      table#users
        - for user in users
          tr
            td.name = user.name
            td.age = user.age
    - else
      p Not found.

関数や変数を呼び出したいときは =(イコール) を使用する

上のコードのループ文内で=(イコール)を使っている部分は変数内の値を呼び出しています。

ここまでわかればとりあえず実践で使えるはず!書かなくていいのでめっちゃ楽!!

最後に

たったこれだけ覚えるだけでも相当便利なのですが、Slimにはもっと便利な機能が詰まっているので、もし興味がある方は公式ドキュメントを見ていただけると幸せになれると思います!

関係ないけどここでSASS本を

Web制作者のためのSassの教科書 これからのWebデザインの現場で必須のCSSメタ言語
平澤 隆 森田 壮
インプレスジャパン
売り上げランキング: 48,416
Read more

こんにちは!

最近ちょこちょこRubyで遊びながら、Rubyという言語に慣れていってる途中です。

今回はRailsでお馴染みのActiveRecordをRails内じゃなくてRuby単体のプログラム内で使ってみようと思います。 やっぱりCakePHPに慣れているので単体のプログラムでもActiveRecordが使えるととても助かると思います。

それではやっていきましょう。

といっても毎度Rubyは簡単に終わらせてくれるので簡単に終わります。

ちなみに環境は

  • Ruby・・・2.1.0
  • Gem・・・2.2.0
  • MySQL・・・5.6.15

gemのインストールをしましょう。

データベースの設定ファイルをYAMLに落としておきます。

database.yml

db:
  product:
    adapter: mysql2
    host: localhost
    username: root
    password: password
    database: test

あとはこのYAMLファイルを読みこめば終了です。

require 'rubygems'
require 'active_record'

conf = YAML.load_file('./database.yml')

ActiveRecord::Base.establish_connection(conf["db"]["product"])

# テーブルにアクセスするクラスを作成
class User < ActiveRecord::Base
end

# 全レコード取得
User.all

こんな感じでもう終了。 さすがRubyさん。ほれますわ

とりあえず文法やるときに

たのしいRuby 第4版
たのしいRuby 第4版
posted with amazlet at 14.02.04
高橋 征義 後藤 裕蔵
ソフトバンククリエイティブ
売り上げランキング: 31,358
Read more