undefined method 'application' for Rails:Module
というエラーが出るので対策を調べました。springが原因だったようです。
faviconを取得したければ<link rel="icon" href="favicon.ico">を探すなどの正攻法がありますが、
色々と例外があるようなのでめんどくさい時はGoogleさんに任せてしまいましょう。
URI('https://www.google.com/s2/favicons?domain_url=stackoverflow.com').read でとれます。
参考 https://stackoverflow.com/questions/5119041/how-can-i-get-a-web-sites-favicon
Ruby 2.3 まではBigdecimalへの変換を行う String#to_dが数字ではない文字列だった場合にString#to_iと同じ0.0を返す仕様だったのに2.4からは例外を吐くようになったようです。
Ruby 2.3 require 'bigdecimal' require 'bigdecimal/util' 'abc'.to_d #=> 0.0 Ruby 2.4 require 'bigdecimal' require 'bigdecimal/util' 'abc'.to_d ArgumentError: invalid value for BigDecimal(): "abc" 対策 バグでした。gem update bigdecimal して、Gemfileを設定しましょう。
https://github.com/ruby/bigdecimal/issues/51
状態 こういうふうに書いたらtarget: '_blank'が効かなくて困った。
simple_format(auto_link(text, :target => "_blank" )) 対策 simple_formatはaタグのtarget属性を取り除いてしまうので順番を入れ替えて、こう書くとOK。
auto_link(simple_format(text), :target => "_blank" ) 参考 https://github.com/tenderlove/rails_autolink/issues/20#issuecomment-24818734
更新されてる時だけファイルをダウンロードしたいときなどに使う目的で。
uri = URI('http://example.com/foo.xls') Net::HTTP.get_response(uri)['last-modified'] "Mon, 08 May 2017 01:34:46 GMT"
foo = [1,2,3,4,5] foo.values_at(2,4) #=> 3, 5 いつも忘れるので自分が忘れた時に検索ですぐ引っかかるようなタイトルにしてます。
複数カラムの値が重複してるオブジェクトの情報を取るために
posts = Post.select(:title, :user_id, :date).group(:title, :user_id, :date).having("count(*) > 1").all とするとこんな感じのidがnilの配列が返ってくるので
:id => nil, :user_id => 1345, :title => 'foo', :date => Tue, 01 Sep 2015 posts.each do |post| duplicated_posts = Post.where(user_id: post.user_id, title: post.title, date: post.date) # なんか処理する end な感じで適当に処理しましょう。
追記 こちらのほうがスッキリ書けますね。
posts.each do |post| duplicated_posts = Post.where(post.attributes.except('id')) # なんか処理する end
File.write(filename, text)でファイルに書き込みできるの便利ですよね。
でも、File.appendは用意されてないのでFile.open(filename, 'a'){|f| f.write(text)}のように書かなきゃいけません。めんどくさい。
なのでめんどくさくないように定義しましょう。やっぱり既存クラスのメソッド拡張ができるRubyはいいですね。
class File def self.append(filename, text) File.open(filename, 'a'){|f| f.write(text)} end end
Hashのキーをリネームしたかったけどデフォルトのメソッドはないようなので書いた
class Hash def rename_key(old:, new:) return unless has_key?(old) return if has_key?(new) self[new] = self.delete(old) self end end 使い方 h = {a: 1, b: 2} { :a => 1, :b => 2 } [92] pry(main)> h.rename_key(old: :a, new: :c) { :b => 2, :c => 1 } 変更前のキーが存在しない時と、変更後のキーが存在する時は何もしない。
実際の入れ替え処理はself[new] = self.delete(old)だけで終わってます。
参考 http://kmckelvin.com/blog/2014/06/renaming-items-in-a-ruby-hash
rake task で長時間起動するため排他処理をしておかないと複数起動してしまう物があったので多重起動を禁止にしました。
namespace :foo do task :update_all => :environment do |task| process_count = `ps -ef | grep #{task.name} | grep -v grep | wc -l`.to_i next if process_count > 1 end end でOK。呼び出し部分をメソッド化とかしたかったけど、上手くいかなかったのでとりあえずこれで。タスクのブロック引数としてtaskをちゃんと書いておかないとtask.nameが使えないので注意しましょう。
参考 [ShellScript – Rakeタスク実行時、プロセス起動数を確認して排他制御する – Qiita][1]