Ruby on Rails

rails4にckeditorを導入(carrierwave、mini_magick使用)

追記 & 注意!

多分バージョンが上がったばっかりだと思うのですが、ckeditor4.2だとエラーが出てうまくアップロードの部分が動きませんでした。遅くらrails5用なんでしょう。
なので4.1.xの最新を使いましょう。

ckeditorはなんだかんだ定番です。

なんだかんだ定番のwysiwygです。デザインがちょっと古くさかったりなど思うところはあれど、wysiwygに求めていることは一通りやってくれるので重宝します。

今回は導入から、ツールバーの編集と、rails4で出てくるエラーの解消についてまとめました。

いくつか一緒に使うgemはあるようですが、今回は

  • carrierwave
  • mini_magick

を併用します。

インストール

ここはほぼお決まりのことをします。

jsの追加

application.jsに下記を追加する。

viewへの実装

form_forに実装する場合は、下記で実装可能です。

simple_formを使っている場合は下記のような形で使用できます。

ツールバーの機能をFULLにしていると多すぎて鬱陶しいという方もいると思いますので、その場合はminiに設定しましょう。

ここまでで画像以外の最低限の設定は完了です。

画像アップロードをするための設定を行う。

まずは必要なものをインストールします。

マイグレーションファイルが生成されるので、実行しましょう。

これですでに一通りの事ができるはずです。

ツールバーをカスタマイズする。

ツールバーをカスタマイズにするには、まずgemの中にある設定ファイルを持ってくるのが手っ取り早いです。

assets/javascripts/の中にckdeditorというディレクトリを作成してconfig.jsというファイルを作成してあげると、そちらを優先して読み込んでくれるみたいです。

設定ファイルの中身は内容はいろいろあるんですが、ツールバーを設定するには下記の部分を編集していくと良いかと思います。

ファイルの中身に描いてある、設定内容でなんとなくその機能を指しているかはわかると思います。

「Sprockets::Rails::Helper::AssetNotPrecompiled in Ckeditor::Pictures#index」を解消する。

原因は正直イマイチわかっていませんが、「Sprockets::Rails::Helper::AssetNotPrecompiled in Ckeditor::Pictures#index」というエラーが出ます。

production時にコンパイルされてなく、見つからないファイルがあると出るエラーのようですが、開発環境でもこれが出てしまいます。

下記をconfig/initializers/assets.rbに記述するとこのエラーが解消されます。

simple_formとtwitterbootstrapで簡単にかっこよくformを作る。

ど定番のgemの連携ですが、メモがてらまとめました。

インストール

下記で必要なものがインストールされます。

使い方

使い方は名前の通り非常にシンプルで、

f.inputで何が生成されているかというと下記のものが生成される。

上記の自動生成されるHTMLには下記のものが含まれています。これはvalidateでpresenceをつけていると自動で生成してくれます。

フォームのデザインを変える

デフォルトだとvertical_formというwrapperとなっていて。見た目的には

lebel
input

という形で2段に別れています。これをhorizontal_formに変更してみます。

変更方法は2つあります。

configでdefault_wrapperを書き換える。

139行目あたりにデフォルトの設定がされています。

こちらで実装すると共通して、設定したformになります。(今回で言えば、:horizontal_form)

各formに直接設定する。

こちらだと、form単位で設定することができます。

どちらにせよクラスの設定は必要。

上記のどちらかの設定だけでも、それっぽくはなりますがデザインを完成形にするにはクラスの設定も必要です。

configで設定している場合は、wrapperの設定は必要ありません。

今回のhorizontal-formで吐き出されるHTMLは下記になります。

各項目のエラーメッセージをfull_messageと同じにする

simple_formを作成すると、エラー時に各エラーメッセージを表示してくれる。

が、双方微妙に表示内容が違う。

  • fulle message
    「Category name can’t be blank」

  • message
    「can’t be blank」

これを日本語に調整しようとすると面倒なので、どちらもfull messageの内容を表示する。

railsの(gem)configを使って簡単に定数を管理する

rails上で定数を管理するconfigというgemを使って管理することができます。

元々はrails configという名前だったそうですが、rails以外でも使えるためconfigに統一されたそうです。が、ずいぶんわかりづらい名前ではなかろうか・・w

(rails)configの特徴

rails configの特徴としてはyml形式のファイルで直感的に定数の管理をできます。ymlの特徴ですがファイルを見ただけで非常にわかりやすい。後述しますが、呼び出す際もドット記法で簡単に呼出せます。この直感に訴える感じがとっても好きです。

また、もう一つの大きな特徴が環境毎に定数を管理することができることです。

インストール

早速インストールしていきます。

gemのインストールが完了したら、下記でconfigのインストール。

ファイルが生成される。

ymlに定数を追加する。

すごく直感的に書けます。

試しにviewに書いてみます。

画面にはhogehogeと表示されるはずです。

その他もドットでつなぐだけでガンガン書くことができます。

以上です!

Could not find a JavaScript runtime. が出たときの対応

WEBRickを立ち上げるときに下記のようなエラーが出た場合の対応方法。

解決策

ExecJSのGithubのページにあるものから何かしら入れれば良いようです。

今回はtherubyracerを入れます。

以上で再度WEBRickを立ち上げて正常に立ち上がれば問題なし。

rbenvを使ってrubyのバージョンアップ

rbenvを使ってrubyバージョンをあげる方法のまとめです。ebenvを使っているので非常に簡単ですが、何度も行うことでは無いのでメモがてらまとめました。

もともと使っていたbundler経由のgemの復活までです。あまりバージョンが違うとbundler経由のものなども、色々弊害が起きてしまいそうなので、その辺はそれぞれの環境を調べてください。

想定

下記は大前提です。これが違うと全く役に立ちませんw

  • 途中まで作成した、もしくは作成済みのアプリケーションのバージョンをあげる。
  • rbenvを使って、バージョン毎に切り分けている。

手順

  1. 入れたいrubyの確認
  2. rubyをインストールする
  3. bundlerを入れ直す。
  4. bundler経由で入れたgemを再度入れる。
  5. いらないバージョンは消します。

入れたいrubyの確認

ずらーっと一覧が出るので、確認してください。今回は2.2.3を入れます。

rubyをインストールする

インストールします。

インストールが問題なく終わったとは確認します。

bundlerを入れ直す。

rbenv経由のgemで入れます。

ここまででバージョンアップは終わりです。
次にもともと運用していたものを復活させます。

bundler経由で入れたgemを再度入れる。

ここで注意点はrubyのバージョンが違って、bundlerが新しくなっているので、今まで入れていたものはgemを入れ直さなきゃいけない。

bundlerもインストール先のパスとかリセットされているので、間違えると厄介なので注意します。

以上です。

追記

バージョンアップ後にWEBRickを立ち上げたら「Could not find a JavaScript runtime.」というエラーが出たので、それも記事にしました。

Could not find a JavaScript runtime. が出たときの対応

bundlerを使って、passenger5の導入

Railsの開発のときはwebrickでも全く問題ないのだが、個人的にはVagrantを開発環境で使っているのでわざわざもうひとつウェブサーバーを立てることが非常にめんどくさかったので、passengerを使ってApacheで動かすことにしました。そのときのメモです。

全体でやること

  • passengerのインストール
  • passengerの設定
  • VirtualHostの設定

apacheのインストールとかVirtualHostの詳細の仕方とかはは割愛します。

まずはpassengerを bundle install

追加したら

確認して、存在していればOK!

passengerの設定

まずこいつをpassengerの諸々の為に行うそうです。

このあとはとにかくコンソールが動きます。途中で、なんのプログラミング言語を使うの?などを聞かれるので、その辺は適宜回答してください。

最後の方で、apacheのconfに書き込む設定を吐き出すので、それを忘れずにメモ。

上記をコピペしないで、コンソールに表示されたものをちゃんと使いましょう。念の為。

VirtualHostの設定

passengerを使いところに上記で、メモしたものを記載すればOK。

今回では諸々開発環境があるので、外だししVirtualHostの設定ファイルに追記します。

冒頭に先ほどのファイルのコピペ。

それ以降はVirtualHostの設定です。railsの場合はappフォルダの下のpublicをDocumentRootに設定するので注意が必要です。

bundle install で nokogiri がインストールできない。

前はそんなことなかったんだけど、railsの環境を少し変えたらbundle install するときにnokorgiri でこけた。

実行環境

普通にbundle installとエラーが出る。

bundle を最初から設定していきます。

作成されたGemfileに必要なgemを追加して、bundle install するとnokogiriをインストールする際に失敗してしまいました。

上記のようなエラーが出ました。

解決策

ぶっちゃけ原因はよくわからないのですが、どうやらnokogiriをシステムのライブラリを使うようにするとうまくいくようです。

なので、bundleにまず設定します。

Linux側では書きが必要なのでインストールしておきましょう。

上記を行った後に再度bundle installしましょう

Ruby on Rails でMySQLを使えるようにする

前提と目標

railsを入れるところまではやってあることが前提。

ちなみに僕はローカルのrails環境をVagrantで構築している。その手順はこちら。「Vagrantで全ユーザー共通の Ruby on Rails の環境設定作り」

今回はこれの続きのようなもので、初めてrailsの環境を構築したので、その続きを色々触ってみたいので、それを忘れない様にメモしてく。

railsいじるのが初めてなので、非効率なのはご愛嬌。

とりあえずは開発環境を整えるにあたってDBを用意しなきゃいけない。だけどデフォルトのsqliteは使わずMySQLを使いたいので、railsでMySQLを使えるようにします。

MySQLをセッティングする

サーバーにMySQLがセッティングされているのは前提です。まだって人は以下のMySQLの部分を上手く活用してみてください。「さくらVPSで借りたCentOSでLAMP環境のセッティング」

今回やることの手順は以下です。

1. mysql2を追加する

Gemfileにmysql

bundle install します

追加されてればOKです。

ユーザーの追加

db自体はrails側から作成します。なので、今回はユーザーのみ作ります。
本来はdevelopment, test, productionの3ユーザー着くってそれぞれのDB作ったりなどできるようですが、今回はとりあえず簡単に初めてしまいたいのでdefaultに全部寄せてしまいます。

ユーザーもとりあえずGRANT ALLで作っちゃいます。この部分は各環境毎に合わせて作成してください。

2. /config/database.ymlの修正

rails newする

ここまでにrailsは入れといて下さい。ちなみにrailsを作る際に引数付けてコマンドを打つとmysql用にdatabase.ymlを作成してくれます。まあ、どうせ編集するのでどっちでもいいような気もしますが。

database.ymlの修正

3. dbの作成

この際、僕はmysqlユーザーの設定が悪かったのか、dbが作れませんでした。db作れないよとrailsさんに言われている際には、そちらの見直しもしてみないとなと。

以上で、MySQLが動作していると思います。

次回はマイグレーションをちょこちょこ使います。

Vagrantでの全ユーザー共通の Ruby on Rails の環境設定作り

目指すのは下記の環境

  • vagrant
  • rbenvでのrubyの環境づくり
  • bundler で管理
  • 全ユーザー共通の環境づくり

rbenvの環境設定

全ユーザ共通で管理出来るようにすることが前提。

githubからrbenvとruby-buildを取得する
rbenv
https://github.com/sstephenson/rbenv.git
ruby-build
https://github.com/sstephenson/ruby-build.git

rbenvの設定

ここでは全ユーザー共通の管理を出来るようにすることが前提のため、rbenvを/usr/local以下に置く。

環境変数の設定

環境変数もrbenvと同様に全ユーザー共通のために置く場所を変更する。

従来の/home/USER_NAME/.bash_profileではなく、/usr/profile.d/以下にrbenv.shを作成して環境変数を設定する。

/etc/profileに書くのもよいが、アプリケーション毎に特有の設定は切り出しておいた方がよいだろうということでrbenv.shに切り出します。

ここでは、/user/profile.d/rbenv.shとして下記を記述。

設定を読み込みます。

ruby-buildを取得

rubyをインストール

rubyがちゃんと入っているかを確認する。

こうなっていればOK。

bundlerを入れる

rubyを入れるとgemがついてきます。ちなみに1.9以前のバージョンのものには標準でついていないので自分でインストールする必要があります。まあ、基本的にそこはあんまり気にする必要はなさそう。めずらしい案件以外は。

bundlerでrailsをセットする。

Gemfileの作成

Gemfileの修正

デフォルトのGemfileが作成される。デフォルトではgemのリポジトリのURLとrailsの設定が書いてるのみ。

※ 2014年末にデフォルトで記載されているURLからgemファイルがDLできない自体になっていた。その為、明示的に日本リポジトリの http://tokyo-m.rubygems.com に変更した。ちなみに1月10日に試した時点ではそれも直っていたの、あくまでに参考までに。

必要なgemのインストール

–path vendor/bundleをつけることでrailsアプリケーションのvendor/bundle以下にgemファイルがDLされるように指定することができる。
一度記載すれば.bundle/configファイルに登録されるため、次回行こうは省略しても同じ場所にDLされる。

bundle install後は指定通りvendor/bundle以下にgemファイルが入っている。
bundle install後にはGemfileと同じディレクトリにGemfile.lockというファイルが生成される。これはBundlerが解消したgem同士の依存関係やバージョンが記録されている。これはgitに含めるべし。

ちょっと外れるけどGemfile更新〜bundle installの時にやってみてもいいこと

git status ~ git commit の様に状況確認してから、登録する方が個人的には安心する。一連のその流れが以下。

railsのインストール

bundleを使います。

上記でカレントディレクトリにrailsプロジェクトが作成されます。

vagrantでサーバーを立ち上げてブラウザで確認するまで

vagrantで作成し、ブラウザから確認する場合、通常のLinuxで見る場合の他にVagrantfileの設定が必要です。

iptablesの設定

上記のように3000番を通してあげる。

Vagrantfileの修正

ポートフォワードでゲストの3000番をホストの3000番に振る。

立ち上げて確認まで苦労したrails server

あとは rails serverを立ち上げて http://localhotst:3000 にアクセスします。

が、一向にアクセスできない。。

http://localhost:3000 も、 http://192.168.33.10/ も アクセスできない。

どうしようかと格闘した結果、詰まっていたのでrorの達人に質問して分かったことは下記のコマンドで http//localhost:3000 にアクセスできるようになるとのこと。

意味はあまりわかってないので、詳細調べたら追記しよう。。