array1 | array2 で (array1 + array2).uniq と同じように配列を重複なしで結合してくれます。ステキ!
例えば foo.rbというRubyスクリプトの実行時間をシェル上で知りたかったらtime foo.rbとすればいいわけですが、残念ながらirb上ではtimeコマンドをそのまま使うことができません。
解決策 標準で用意されているBenchmarkライブラリを使えばOK.
irb(main)> require 'benchmark' irb(main)> puts Benchmark.measure { "a"*1_000_000_000 } 0.350000 0.400000 0.750000 ( 0.835234) こんな感じで表示されます。
0.750000がCPUを使った時間で0.835234が実際にかかった時間。
気にしないといけないのはCPUを実際に使ってたじかんなので前者のほうになります。
ちなみに自分の環境だと裏で動画のエンコードを走らせながらVirtualBox上のOSでやってたのでCPU使用時間の50倍ぐらい実際にかかってしまってました。
参考 [Module: Benchmark (Ruby 2.1.1)][1]
[When benchmarking, what causes a lag between CPU time and “elapsed real time”? – Stack Overflow][2]
RailsでPostgresqlを使うときに毎回そのためのユーザーの作成方法を忘れてしまうのでメモ。
まずユーザーを作成 WindowsでChocolateyを使ってpostgresqlをインストールしてると初期パスワードはPostgres1234になってるので、
$ psql.exe -U postgres ユーザ postgres のパスワード: ←ここでパスワードを入力 psql (9.2.1) "help" でヘルプを表示します. postgres=# create user deployer; CREATE ROLE postgres=# alter user deployer with superuser; ALTER ROLE これでパスワード無しのdeployerユーザーが必要な権限付きで作成される。
※ Linux系のOSならsudo -u postgres psqlでpsqlコマンドを使いましょう。
パスワード無しユーザーでもOKにする これだけだとfe_sendauth: no password suppliedというエラーが出てしまうので
C:\PostgreSQL\data\pg_hba.confを開いて
# IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 を
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust に書き換える。
twitter-bootstrap-railsを普通にWindowsで使おうとするとlibv8がないからアカンで~的なエラーが出てきてインストールに失敗します。
対策 特定のバージョンはインストールできるのでそれをインストールしましょう。
gem install libv8 --version 3.11.8.0
あとはGemfileにgem 'therubyracer', platforms: :rubyのコメントアウトを外してgem twitter-bottstrap-railsを追加すれば万事OK!
追記、より良い解決策 そもそもbootstrap-sassを使えばよいのでは?
RailsのDBからGETでデータの呼び出しはできるけど、PUTで値の追加ができなくてこんなエラーに成った時の対処法
Completed 422 Unprocessable Entity in 126ms ActionController::InvalidAuthenticityToken - ActionController::InvalidAuthenticityToken: 原因 CSRF対策です。
ダメな対策 モデルにこれを追加
skip_before_filter :verify_authenticity_token サイバーノーガード戦法です。おすすめしません。
良さそうな対策 gem の<a href="https://github.com/xrd/ng-rails-csrf">ns-csrf-rails</a>を使う。わからないことは全部gemにまかせてしまいましょう。
文字幅をしるために全角=2,半角=1で文字サイズが取得したかったので
やり方 "日本語とEnglish".each_char.map{|c| c.ascii_only? ? 1 : 2}.inject(:+) Rubyばんざーーい!
参考 [2013/02/20/Rubyで全半角混在文字の文字幅を計算する方法 – ヽ(´・肉・`)ノログ][1]
db/seeds.rbにUser.createでencrypted_passwordを与えてDeviseのユーザーを作ろうとしたら失敗した。
原因 passwordが存在しないためにvalidationに引っかかってしまってる。
対策 passwordを平文で打てば解決するらしいけど、平文のパスワードは使いたくないのでバリデーションの方を無効化してしまいましょう。
User.new(email: someone@example.com).save(validate: false)
でOKです。encrypted_passwordの取得方法は色々あるでしょうが、自分の場合は一度Deviseで作ってからそれをrails console使ってUser.first.encrypted_passwordを取ってきました。
参考 [Cannot create Devise account using rake db:seed for Rails 3.0 – Stack Overflow][1]
/usr/bin/env: ruby.exe: そのようなファイルやディレクトリはありません
というエラーがwheneverで作ったcronのログとして出てきて困ってた。
bin/railsの実行権限とか/usr/bin/env ruby --version でちゃんとrubyが動いてるかどうか確認したりとか色々。
答え Windowsで作ったRailsプロジェクトだったので ruby<strong>.exe</strong>になってた。なんてことだ…。
解決策 bin/railsの一行目usr/bin/env ruby.exeの.exeを削除しておきましょう。ふぁっく。
rubyは文字列の配列を作るときに["foo", "bar"] と書くのがめんどくさいからという理由で %w(foo bar) みたいな感じで書けちゃいます。
同じような感じでsymbolもかけないかと思って探してたらruby 2.0.0から%iが使えるようになったので
%i(foo bar) で [:foo, :bar] が書けちゃいます。ステキ!
参考 [ruby – Is there way to create a symbol's array like string with %w? – Stack Overflow][1]