hello-world
webエンジニアのメモ。とりあえずやってみる。

[ruby]thorコマンド内でgetsを実行すると`gets': No such file or directory @ rb_sysopen エラーが発生

公開日時

thorを使ってCLIコマンドを作っていた際に、getsを使ってユーザ入力を受け取ろとしたところ

`gets': No such file or directory @ rb_sysopen

というエラーが発生してしまいました。

thor内でgetsを実行する場合は

STDIN.gets.chomp

にするとよいそうです。

サンプル

# sample

require 'rubygems'
require 'thor'

class Sample < Thor
  desc "hello", "this is gets sample"
  def hello
    while true
      print "is it ok? [y|n]:"
      response = STDIN.gets.chomp
      #response = gets # <= gets だとエラー発生
      case response
      when /^[yY]/
        p 'YES!YES!YES!'
        return
      when /^[nN]/, /^$/
        p 'NO!NO!NO!'
        return
      end
    end
  end
end

Sample.start(ARGV)

サンプル実行

bundle exec ruby sample hello
is it ok? [y|n]:y
"YES!YES!YES!"

これで直りました。

参考


Related #Ruby

[Rails]find_or_create_byとfind_or_initialize_by

Rails4で確認。

capistranoで世代管理する際の注意点

最近、デプロイツールに capistranoを使っているのですが、世代管理の設定を勘違いしていたのでメモを残しておきます。

[rails]unicornでpryを使う

先日、pryでデバッグする という記事を書きましたが、こちらはrails server(フォアグランド)でアプリを立ち上げた際のデバッグ方法でした。