怖話をruby1.9.3-p194、rails3.2.8にアップグレードしました。
ビビリなのでとりあえずconfig.active_record.whitelist_attributesはまだで。
@machidaさんがsassをcompassベースにしたりと、そろそろ少し複雑化してきたコードベースの負債を返済中。
怖話をruby1.9.3-p194、rails3.2.8にアップグレードしました。
ビビリなのでとりあえずconfig.active_record.whitelist_attributesはまだで。
@machidaさんがsassをcompassベースにしたりと、そろそろ少し複雑化してきたコードベースの負債を返済中。
>> helper.link_to 'foo', 'bar'
=> "<a href="\"bar\"">foo</a>"
>> app.users_path
=> "/users"
# config/application.rb
module Foo
class Application < Rails::Application
(snip)
config.sass.preferred_syntax = :sass
end
end
cordovaを使う時にhamlとsassとcoffeeを使いたかったのでguardでそれぞれをwatchするようにした。
普段は何らかのWebサーバーが立ち上がってて出力を直接返すからこういう風にそれぞれの静的ファイルを必要とすることって意外と少ないですね。
$ gem install guard-haml guard-sass guard-coffeescript
このようなディレクトリ構成にする場合。
# Guardfile
haml_options = { format: :html5, attr_wrapper: '"', ugly: true }
guard "haml", input: "haml", output: "www", haml_options: haml_options do
watch %r{^haml/.+\.haml}
end
guard "sass", input: "sass", output: "www/stylesheets"
guard "coffeescript", input: "coffeescripts", output: "www/javascripts", bare: true
GUIのCodeKitってヤツを試したんだけど、ちょっとカスタマイズしたくなるとやっぱりCLIが便利ですね。
ペパボの新しいPaaS、SQALEのクローズドβ招待頂いたのでやってみた。
ダッシュボードで公開鍵を登録して下記。
$ git clone ssh://sqale@gateway.sqale.jp:2222/komagata/foo.git
$ cd foo
$ vi config.ru
require 'rubygems'
require 'rack'
class App
def call(env)
[200, {'Content-Type' => 'text/plain'}, ['foo']]
end
end
run App.new
$ git commit -am'First commit'
$ git push origin master
$ open http://foo-komagata.sqale.jp/
おお、動いた。
他のPaaSとどう差別化していくのか気になりますね。
Macを再インストールしたのでrvmが新しくなったからか、capれない。
% bundle exec cap staging deploy
/Users/komagata/.rvm/lib/rvm/capistrano.rb:5:in `': RVM - Capistrano integration was extracted to a separate gem, install: `gem install rvm-capistrano` and remove the `$LOAD_PATH.unshift` line, note also the 'set :rvm_type, :user' is now the default (instead of :system). (RuntimeError)
長いエラーをちゃんと読むと、rvmのcapistrano関連の部分はrvm-capistranoとして別gemになったようです。Gemfileに追加します。
group :development do
gem 'rvm-capistrano'
end
また「$LOAD_PATH.unshiftしてんのを取れ」と出てるので大抵の人はRAILS_ROOT/config/deploy.rb
に書いてる下記を取ればOK。
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # REMOVE ME!
コンパイラが変わるという大転換期なので仕方無いとは思いますが、Xcode依存のゴタゴタはプログラマーにも厄介。デザイナーさんに環境作ってと気軽に言い辛いここ最近のMac環境です…。
I reinstalled Mac OS X Lion in Golden Week.
Clean install by Bootable USB Memory at first.
$ defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen 1
$ defaults write NSGlobalDomain KeyRepeat -int 1
And reboot.
$ defaults write com.apple.finder AppleShowAllFiles TRUE
$ killall Finder
$ xattr -d -r com.apple.quarantine ~/Downloads
$ defaults write com.apple.dashboard mcx-disabled -boolean YES
$ killall Finder
$ touch ~/.hushlogin
Download and Install Android SDK
$ cp -r /BACKUP_DIR/.ssh ~/
$ chsh -s /bin/zsh
bitbucket is pretty good for dotfile repos. because private repos is free.
$ git clone git@bitbucket.org:komagata/dotfile.git ~/code/dotfile
$ cd ~/code/dotfile
$ ruby symlink.rb
$ source ~/.zshrc
.vimrc and plugins is contained dotfiles directory.
Plugins:
Bundle ‘The-NERD-tree’
Bundle ‘quickrun’
Bundle ‘fakeclip’
Bundle ‘tpope/vim-rails’
Bundle ‘vim-ruby/vim-ruby’
Bundle ‘Shougo/neocomplcache’
$ curl -L get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm
$ rvm requirements
$ /usr/bin/ruby -e “$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)”
$ brew install libksba
If you get something wrong, use below.
$ brew install imagemagick –build-from-source
You can’t use multibyte-language (Japanese etc) in irb when install without option.
$ rvm pkg install readline iconv
$ rvm install 1.9.3-p194 –with-readline-dir=$rvm_usr_path --with-iconv-dir=$rvm_path/usr
$ brew install mysql
$ unset TMPDIR
$ mysql_install_db –verbose –user=whoami
–basedir=”$(brew –prefix mysql)” –datadir=/usr/local/var/mysql –tmpdir=/tmp
$ cp /usr/local/Cellar/mysql/5.5.20/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$ rvm install ruby-1.9.3-p125
Installing Ruby from source to: /home/deployer/.rvm/rubies/ruby-1.9.3-p125, this may take a while depending on your cpu(s)...
ruby-1.9.3-p125 - #fetching
ruby-1.9.3-p125 - #extracted to /home/deployer/.rvm/src/ruby-1.9.3-p125 (already extracted)
Applying patch 'xcode-debugopt-fix-r34840' (located at /home/deployer/.rvm/patches/ruby/1.9.3/p125/xcode-debugopt-fix-r34840.diff)
Error running 'patch -F 25 -p1 -N -f <"/home/deployer/.rvm/patches/ruby/1.9.3/p125/xcode-debugopt-fix-r34840.diff"', please read /home/deployer/.rvm/log/ruby-1.9.3-p125/patch.apply.xcode-debugopt-fix-r34840.log
autoconfが必要らしいので入れる。
$ sudo apt-get install autoconf
こういう場合、普通にinstallするとパッチ当て損ないのソースをもう一度使おうとするらしく、reinstallする。
$ rvm reinstall ruby-1.9.3-p125
OK。
rvmでruby-1.9.3-p125をinstallしたらエラー。指示に従ってmakeログを見てみる。
% lv /Users/komagata/.rvm/log/ruby-1.9.3-p125/make.log
[2012-03-20 05:12:02] make
CC = clang
(snip)
おお。平然とcコンパイラがclangになってる。ちょっとおっさん、軽く遠い目をしてしまいました。
% vi ~/.zshrc
export CC=gcc-4.2
コンパイラをgcc-4.2にしたら無事installできました。 clangって何か未来的な感じがしますね。今度勉強しよう。
deviseはデフォルトでuserの更新(Devise::RegistrationsController#update)に現在のパスワード(current_password)が要る。
ソースを見てみるとmodelにupdate_without_passwordというのがあるのでこれかと思いきや、これはpasswordとpassword_confirmation無しでupdateするものだった。
自分でupdate_without_current_passwordを作る。
# app/models/user.rb:
class User < ActiveRecord::Base
def update_without_current_password(params, *options)
params.delete(:current_password)
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
clean_up_passwords
update_attributes(params, *options)
end
end
controllerからもこれを使うようにする。
# app/controllers/registrations_controller.rb:
class RegistrationsController < Devise::RegistrationsController
def update
@user = User.find(current_user.id)
if @user.update_without_current_password(params[:user])
sign_in @user, bypass: true
set_flash_message :notice, :updated
redirect_to after_update_path_for(@user)
else
render 'edit'
end
end
end
面倒ですね。