Passion make things more better

Rails, Swiftあたりの話題を中心に書いています

Railsでseedデータを分割して実行できるようにする

個人的にRailsのseed運用は以外と悩みがちです。seed-fu使ったりと色々やりましたが、これから説明する方法に落ち着きました。

  • ファイルを指定してseedを実行できるようにrake taskを作成する
  • db/seeds以下のディレクトリを作成し、以下にxxxx.rbといった実行したい処理を書いたファイルを用意
  • bundle exec rake db:seed:xxxx(作成したファイル名)で実行

rake taskの作成

コマンドでファイルを指定して実行できるようにrake taskを作成します。 ※参考に記載したサイトのコードをお借りしております。

# lib/tasks/seed.rakeとして以下を作成する

Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')).each do |file|
  desc "Load the seed data from db/seeds/#{File.basename(file)}."
  task "db:seed:#{File.basename(file).gsub(/\..+$/, '')}" => :environment do
    load(file)
  end
end

seedファイルの用意

db/seedsというディレクトリを作成し、以下に行いたい処理を記載したファイルを作成します。 今回は例でCategory(nameカラムを持つ)モデルに対してseedデータを挿入するファイルを作成します。

# db/seeds/category.rb

Category.create(name: 'サンプル')

seedファイルの実行

db/seeds/category.rbを以下のコマンドにて実行します。

~ bundle exec rake  db:seed:category

これでseedデータが挿入できたかと思います。 個人的にはこのやり方が一番しっくりきているので、しばらくはこちらで続けたいと思います。

参考

Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) matching the team ID "xxx" were found. の解決方法

チームで開発をしていたとき通常のbuildは通ったのに、archiveをした際にエラーが起きてしまいました。 エラーメッセージを見ると以下が表示されていました。

Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) matching the team ID "xxx" were found.

原因

本来とは違うteam IDでbuildしたため。

解決方法

エラーメーセージに表示されているteam IDで検索をかけて、ひかかったところを元のteam IDに書き換える。 ※私の場合は通常のProjectの方は大丈夫でしたが、Podの方のteam IDが書き換わっていました。

normalize.cssを使用するときのベースCSS

normalize.cssを使用する時のベースとなるCSSです。

html {
  font-family: Helvetica, Arial,"Meiryo","メイリオ","ヒラギノ角ゴ Pro w3","Hiragino Kaku Gothic Pro,osaka","MS Pゴシック",sans-serif;
  font-size: 10px;
  overflow: hidden;
  overflow-y: scroll;
}

body {
  min-width: 1100px;
  margin: 0;
}

@media (max-width: 1024px) {
  body {
    min-width: 100%;
  }
}

h1, h2, h3, h4, h5, h6 {
  line-height: 2;
  margin-top: 0px;
  margin-bottom: 0px;
}

@media (max-width: 1024px) {
  h1, h2, h3, h4, h5, h6 {
    line-height: 1.6;
  }
}
@media (max-width: 740px) {
  h1, h2, h3, h4, h5, h6 {
    line-height: 1.4;
  }
}

h1, h2, h3, h4, h5, h6,
article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary, div, span, p, ul, ol, li, dl, dt, dd, table, tr, th, td, a, img, *:after, *:before {
  box-sizing: border-box;
}

figure {
  margin: 0;
  padding: 0;
}

p, li, dl, table {
  line-break: strict;
  word-break: break-strict;
  word-wrap: break-word;
  line-height: 2;
  font-size: 16px;
  margin-top: 0px;
  margin-bottom: 0px;
}

small {
  font-size: 12px;
}

@media (max-width: 1024px) {
  p, li, dl, table {
    line-height: 1.7;
  }
}
@media (max-width: 740px) {
  p, li, dl, table {
    line-height: 1.5;
  }
}

tr {
  word-break: break-all;
}

img {
  vertical-align: bottom;
  max-width: 100%;
}

a {
  background: transparent;
  text-decoration: none;
  transition: 0.3s;
}

a:focus{
    outline:none;
}

a:hover {
  text-decoration: underline;
}

.clearfix:after {
  content: "";
  display: block;
  clear: both;
}

textarea {
  overflow: auto;
  vertical-align: top;
  resize: vertical;
}

select option {
  padding: 0px 5px;
}

form label {
  cursor: pointer;
}

carrierwaveの設定ファイル

carrierwaveを使う時にいつも設定ファイルを調べているので、備忘録としてよく使うベースの物を。

  • ファイル名をuniqueにしたい
  • original及びthumbのversionで、リサイズを行う
    • resize_to_fitとresize_to_limitどちらもありますが、今回はresize_to_fitを使用
# encoding: utf-8

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # Provide a default URL as a default if there hasn't been a file uploaded:
  # def default_url
  #   # For Rails 3.1+ asset pipeline compatibility:
  #   # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
  #
  #   "/images/fallback/" + [version_name, "default.png"].compact.join('_')
  # end

  # Process files as they are uploaded:
  # process :scale => [200, 300]
  #
  # def scale(width, height)
  #   # do something
  # end

  process :resize_to_fit => [640, 640]
  # Create different versions of your uploaded files:
  version :thumb do
   process :resize_to_fit => [160, 160]
  end

  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
  def extension_white_list
    %w(jpg jpeg)
  end

  # Override the filename of the uploaded files:
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
  def filename
    "#{secure_token}.#{file.extension}" if original_filename.present?
  end

  protected
  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end

end

参考

道具いらずの簡単肩甲骨ストレッチ

肩コリが辛い人。以下の参考サイトのストレッチをやるとなかなか効果があります。

参考