db:fixtures:loadを使えばseed-fuなどを使った場合に起きるseedデータとテストデータの二度書きの手間無くなります。
しかし、paperclipで画像を保存してる時など、fixturesからは読み込めないものを保存している場合に対応できません。
僕は下記のようにして解決しています。
rakeタスクを書く
db:image:load
という画像をアップするtaskを書く。
# lib/tasks/fixtures.rake:
namespace :db do
namespace :images do
desc "Upload images."
task load: :"db:fixtures:load" do
User.all.each do |user|
path = Rails.root.join("test", "fixtures", "files", "users", "avatars", "#{user.name}.jpg")
user.update!(avatar: open(path)) if File.exist?(path)
end
end
end
end
db:fixtures:loadの後に実行する
# lib/tasks/fixtures.rake:
...
Rake::Task["db:fixtures:load"].enhance do
Rake::Task["db:images:load"].execute
end
これでrails db:fixtures:load
すればその後で画像も入ります。
さる4月1日、ローカルインターンのK氏こと亀澤くんが永和システムマネジメントへ新卒として就職しするためインターンを卒業していきました。
関連:railsのインターン
周りにプログラミング経験のある友人はおらず、趣味がダンスと野球というローカルインターンとしては今までいなかった健全なタイプだったため、納会では @machida さんがFCキャプ翼2を厳しく指導したのも良い思い出です。
それにしても改めて調べてみると、チンカスプログラマーこと @hrysd から数えて弊社インターンから永和システムマネジメントさんに就職した人数はなんと亀澤くんでなんと5人目!
まだ誰も辞めた人はおらず、@hrysd もチンカスの癖に結構活躍しているようです。
みんなハッピーになっているようなのでぜひ事業化したいのですが、上手いマネタイズ方法が思いつかず現在に至ります…。
収益が無いとあまりガッツリリソースを使うこともはばかられるので難しいところです。
なにわともあれ、@machida さん情報によると亀澤くんも既に案件に配属されており、元気にやっているようでよかっったです。
PaperclipでGoogle Storageに画像を保存しているときに表示がクッソ遅い。
原因は表示するたびにファイルの存在確認のリクエストを出しているためで、1ファイルにつき200msぐらい遅くなってた。(30個の表示で計6秒遅くなってた)
対応方法は、fog_hostを設定しておけばリクエスト出さなくなるようで、普通の速度に戻りました。
config/initializers/paperclip.rb:
Paperclip::Attachment.default_options[:fog_host] = "http://#{ENV["GOOGLE_STORAGE_BUCKET_NAME"]}.storage.googleapis.com"
deviseのconfirmable
モジュールを使うとデフォルトでemailを変更するときに再確認メールを送信する。
(これがサインアップ時のメールと同じ内容なので使い辛いというのは別の話)
設定でオフにできる。
config/initializers/devise.rb:
Devise.setup do |config|
config.reconfirmable = false
end
class Comment < ApplicationRecord
belongs_to :user
belongs_to :post
alias_method :sender, :user
def reciever
post.user
end
end
こうしておくとメール送るときにわかりやすい。
if comment.sender != comment.reciever
NoticeMailer.recieved_comment(@comment).deliver_later
end
users_url
とかがメール内でも使える。
class ApplicationMailer < ActionMailer::Base
include Rails.application.routes.url_helpers
end
sprocketsやturbolinksを使っていて全css, jsを読み込んでるとしても何だかんだ言って今どのページにいるのか知りたい場合が多いです。
thoughtbotのflutieに始まり色んなところで勝手にcontroller名とaction名をつなげたものを使っていますがそれをベースに動く機能が必要になったので、つなげるルールを明確化するためにgemにしました。
komagata/view_id: Identifier your view from controller and action.
抽象的な名前を取りすぎな気がしますが、とりあえず・・・。
名前のつなげ方でうすが、controllerとactionを--
でつなぎます。
ネームスペースは-
でつなぎます。
PostsController#index => posts-index
DeletedPostsController#show => deleted_posts--show
Admin::DeletedPostsController#create => admin-deleted_posts--create
いつも使う処理なのでgemにしました。
fixed_footer-rails | RubyGems.org | your community gem host
使い方
Gemfileに書きを追加。
gem "fixed_footer-rails"
$ bundler install
application.jsに書きを追加。
//= require fixed-footer
jsから呼び出す。例えばfooter.coffeeを作って下記のように書く。
$(document).on "turbolinks:load", ->
new FixedFooter("your-own-footer-id")
我々sikachuチルドレンにビッグニュース。
sikachu meetup #1 - komagataのブログ
あの、sikachu氏がCookpad社へ入社されたようです。
I am happy to announce that I am joining @cookpad_pr Global Team starting today! Let's get cooking! 🍳
— Prem Sichanugrist (@sikachu) 2017年2月19日
氏の今後を応援しつつ動向を見守りたいと思います。