久しぶりにアプリケーションを作って rails server したらエラーが出た

Ruby のバージョンを 1.9.3p392、rails のバージョンを 4.0.0 にした後、しばらく放置していたので久しぶりにアプリケーションを作って起動しようとしたらエラーが出た。

$ rails server
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-2.0.1/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
     from /usr/local/lib/ruby/gems/1.9.1/gems/execjs-2.0.1/lib/execjs.rb:5:in `<module:ExecJS>'
     from /usr/local/lib/ruby/gems/1.9.1/gems/execjs-2.0.1/lib/execjs.rb:4:in `<top (required)>'
     from /usr/local/lib/ruby/gems/1.9.1/gems/uglifier-2.2.1/lib/uglifier.rb:3:in `require'
     from /usr/local/lib/ruby/gems/1.9.1/gems/uglifier-2.2.1/lib/uglifier.rb:3:in `<top (required)>'
     from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `require'
     from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
     from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `each'
     from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `block in require'
     from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `each'
     from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `require'
     from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler.rb:132:in `require'
     from /home/iishun/rails/iishun/config/application.rb:7:in `<top (required)>'
     from /usr/local/lib/ruby/gems/1.9.1/gems/railties-4.0.0/lib/rails/commands.rb:76:in `require'
     from /usr/local/lib/ruby/gems/1.9.1/gems/railties-4.0.0/lib/rails/commands.rb:76:in `block in <top (required)>'
     from /usr/local/lib/ruby/gems/1.9.1/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap'
     from /usr/local/lib/ruby/gems/1.9.1/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
     from bin/rails:4:in `require'
     from bin/rails:4:in `<main>'

どうやら下記の記述を Gemfile に書き加えると解消するようなので、

gem 'execjs'
gem 'therubyracer'

もう一度 bundle install をしてあげたら無事立ち上がった。

Ruby のコマンドライン引数を使って Twitter に投稿

■2012.5.26 追記
自分は英字の前後に半角スペースを入れて投稿するため、そうなってもよしなに投稿できるように修正しました。

    • -

ほぼ写経

# coding: utf-8

require 'rubygems'
require 'oauth'

tweet = ARGV.join(" ")

consumer_key = '{consumer_key}'
consumer_secret = '{consumer_secret}'
access_token = '{access_token}'
access_token_secret = '{access_token_secret}

consumerObj = OAuth::Consumer.new(
    consumer_key,
    consumer_secret,
    :site => 'http://twitter.com'
)

accessObj = OAuth::AccessToken.new(
    consumerObj,
    access_token,
    access_token_secret
)

accessObj.post(
    '/statuses/update.json',
    'status' => tweet,
    'source' => '{source}'
)

適当なファイル名 (ex: tweet.rb) で保存して、下記のコマンドで実行する。

$ ruby tweet.rb つぶやき内容

引数で渡した文字列がつぶやきとして Twitter に投稿されれば成功。

bundle install で Gem::RemoteFetcher::FetchError になる

■2012.9.19 追記
すんごい前になりますが、以下のコマンドを叩くことで解決するというコメントをいただきました。

$ gem update --system

情報ありがとうございます!

    • -
$ rails new sample --skip-bundle

した後に、

$ bundle install

すると、途中で

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://bb-m.rubygems.org/gems/*.gem)

というエラーが出て bundle に失敗してしまい、なかなか先に進めなくなってしまった。どうやらこのエラー、リダイレクト 11 回以上発生した際に起こるものらしい。ということはこの URL が怪しいと疑ってみた。もしかしたら SSL で転けてるのかもしれない。

そこで、Gemfile の 1 行目を

source 'https://rubygems.org'

から

source 'http://rubygems.org'

にしてみた (s を取ってみた) ところ、bundle install に成功……したはいいけれどこれであってるのかなぁ。追々調査してみることにする。

Xcode 4.2 の release 問題

■2012.4.16 追記
メモリ解放に関するコードは「書かなくてもいいよ」なニュアンスで、推奨ではありませんでした。

    • -

Xcode 4.2 (iOS5) からはメモリ解放の必要が無くなったようで、dealloc メソッド実装したままコンパイルしたら以下のようなエラーが出てコンパイルに失敗。

"autorelease" release is unavailable: not available in automatic reference counting mode

原因は Apple LLVM compiler 3.0 というコンパイラが原因の様子。dealloc メソッドを省略してしまえば良いらしいけれど、プロジェクトの Build Settings から値を変えてることでも回避できるみたい。

プロジェクトをダブルクリック > Build Settings タブを選択 > Apple LLVM compile 3.0 - Language 項の Objective-C Automatic Reference Counting を「No」に変更

Poderosa のオプション設定が保存されない

Windows 7 + 64bit で Poderosa の [オプション設定] が保存されないときの解決策。

コマンドプロンプトを管理者として実行。

\Windows\System32\cms

以下のコマンドを実行。

cd /d "%ProgramFiles(x86)%\Poderosa"
echo. >options.conf #ファイルが存在しないときは生成
cacls options.conf /e /g Users:C
echo. >ssh_known_host #ファイルが存在しないときは生成
cacls ssh_known_hosts /e /g Users:C

レジストリを追加し、Cygwin 1.7 使用時の警告を回避。

reg add "HKLM\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/" /v native /t REG_SZ /d C:\cygwin

参考サイト

絶対無糖: Windows 7 RC 64-bit で Poderosa をインストールしてみた

ところで Windows 7 は権限の罠が多すぎないですか。

.vimrc の設定

文字判定の部分だけ。

if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc
    if s:fileencodings_default =~ 'utf-8'
        let &fileencodings = &fileencodings .','. s:fileencodings_default
        let &fileencodings = substitute(&fileencodings, "utf-8", "utf-8,cp932", "g")
    else
        let &fileencodings = &fileencodings .",cp932,". s:fileencodings_default
    endif
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

参考サイト

ガッツリコピペ参考にさせていただきました。