Railsのタスクでバッチ処理を行う

下記でタスクファイルを作成する

rails g task hoge

下記は登録されている画像ファイル名を全て小文字に変更するサンプル。このようにタスクの中ではモデルに自由にアクセスできる。

namespace :hoge do
desc "処理の説明"
task :update_record => :environment do
Image.all.each do |value|
if value.update_attributes(image_name: value.image_name.downcase)
puts value.image_name + " => " + value.image_name.downcase
else
p value.errors
end
end
end
end

作成したタスクは下記で実行できる

rake hoge:update_record

作成したタスクはrake -vTから一覧で確認することもできる。タスクが増えてきた時は活用したい。

rake -vT

Railsの処理をコンソールから実行する

Railsではコンソールからrails runnerでコードを実行できる。例えば下記は現在の実行モードを確認できる

rails runner 'puts Rails.env’

複数行のコードも実行できる

rails runner '
puts Model.find(1).inspect
puts Model.find(2).inspect
'

定期的に実行するバッチ処理などは、rails runner実行する事もできるが、タスクを利用する方法が適切である。

Rubyの開発環境構築 : Mac編

Macの場合、最初からRubyがインストールされているが、古いバージョンがインストールされている場合がある。最新版のRubyやgemで開発を行いたい、プロジェクトによってRubyやgemのバージョンを切り替えたい場合、rbenvを利用するのが簡単である。

Homebrewのインストール

HomebrewとはMacのパッケージを管理するソフトウェアであり、既にMacにインストールされているパッケージとは別で、簡単にパッケージのインストールとアンインストールを行う。
Homebrew — OS X用パッケージマネージャー

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

インストール後.bash_profile/usr/local/bin/にパスを通す。brewはここにパッケージをインストールする。

export PATH=/usr/local/bin:$PATH

Terminalを再起動するか.bash_profileをリロードする。

source ~/.bash_profile

rbenvのインストール

rbenv、ruby_build、rbenv-gemset、rbenv-gem-rehashをインストールする。

brew update
brew install rbenv
brew install ruby-build
brew install rbenv-gemset
brew install rbenv-gem-rehash

rubyのインストール

ruby 2.1.2がインストール可能か調査する

rbenv install -l | grep 2.1.2

可能であればインストールする

rbenv install 2.1.2

下記のように出れば成功だが、筆者の環境では何らかの問題によってこの処理が完了するまでに1時間以上の時間がかかった。

rbenv install 2.1.2
Downloading ruby-2.1.2.tar.gz… -> ダウンロード先URL
Installing ruby-2.1.2...
Installed ruby-2.1.2 to ~/.rbenv/versions/2.1.2

インストール完了後使用するrubyのバージョンを指定し有効化を行う。この処理の実体はメインディレクトリにruby 2.1.2をコピーするようである。

rbenv global 2.1.2
rbenv rehash 

そのメインディレクトリに.bash_profileでパスを通す。既存のパスを後方に持ってくる事で、Macにデフォルトでインストールされた古いrubyより優先してrbenvのrubyを読み込めるようにする。

PATH=~/.rbenv/shims:"$PATH”

Rails入門などで古い既存のrubyやgemなどを利用してRailsなどをインストールしている場合、環境によっては古いrubyやgemが利用されてしまうため注意すること。

例えばwhichを使って現在どのコマンドを利用しているか確認できる。

which gem
which ruby
which bundle
which rake
which rails

自作CMSの開発を終了してはてなブログやHerokuに身を委ねる事にした

Ruby on Railsを利用して自作CMSを開発しブログを運営していたが、開発に疲れ果てたので開発を終了してはてなブログへ移転することにした。やっぱこっちが使いやすいや。

さくらのVPSRailsCMSのせてnginx+unicornで環境構築つっても、脆弱性があれば修正したり、サーバーの面倒もみなきゃならん。VPSだからブログ以外のアプリ乗せられるって言っても、バーチャルホストは結局神経使ったりするしめんどい。

日常業務でインフラからアプリケーションまで面倒見ててめんどくせーって感じだから、家帰っての趣味開発くらいはインフラ放り投げてアプリケーション開発に専念したいところ。金かかるけどさ、HerokuとかSqaleみたいにアプリごとに環境用意してくれるってのがいかに便利かってのが最近わかってきたね。

ブログもとりあえず書いて、ストレスなく情報共有できればいいっつう。CMS開発とかやってたらブログ書いてても、あーここ修正しなきゃなーめんどいし明日やるかーとか考えてるうちにモチベーションなくなって資料書かなくなるっつう負の連鎖。

私の開発していたCMSオープンソース化してコミュニティの力を借りるって手もあるんだろうけど、そういう試みってWordPressでもうなされてるじゃん。技術者向けのCMSとして世に出すってのも既になされている試みだったりするはず。

WordPressPHPだからやっぱRubyのもって考え方もあるけど、ブログを書くというユーザー目線からしたらどんな言語で書かれてるかとかどうでもいいし、むしろPHPのほうが取っ付き易くて良かったり。やっぱPHPだから良いのかもしらんね。

やっぱWordPressはすげえや。

はてなブログからWordPressなどの外部ブログへ記事を移転しリダイレクトする

はてなブログが閉鎖した時とかもっと便利なブログサービスが出現した時が不安だからはてなブログを利用できないっつーユーザーに向けて私のアイディアを紹介しとく。

独自ドメイン運用時の裏ワザ

はてなブログ独自ドメインで運用しておくことで外部へ移転できる。
はてなブログには外部へのリダイレクト機能を私の知る限りでは備えていないようだが、独自ドメインで運用しているなら、ドメインを別サーバーへ切り替えて、はてなブログで運営していた時の各記事URLを新記事URLへリダイレクトするようにすればいい。

しかしはてなの規約的にはどうだろね?