2018年2月9日 星期五

capistrano 後 可以寫入 git 資訊


config/deploy.rb

namespace :deploy do
  after :finishing, :git_ionfo do
    on roles(:all) do
      version = %x(git log -1 --pretty='format:%H')
      execute "echo '#{version.strip}' > #{release_path}/.git_version"

      tag = %x(git describe --tags --always --long --dirty)
      execute "echo '#{tag.strip}' > #{release_path}/.git_tag"

      branch = %x(git rev-parse --abbrev-ref HEAD)
      execute "echo '#{branch.strip}' > #{release_path}/.git_branch"
    end
  end 
end




2016年6月23日 星期四

ActiveRecord 後可用 select, sort_by, group_by

語句複雜很多table互相牽動時,sql的部分可以簡單化


Ex:

user = [
{ name: "C", is_admin: true, department: 20 },
{ name: "A", is_admin: true, department: 20 },
{ name: "B", is_admin: true, department: 25 },
{ name: "E", is_admin: true, department: 25 },
{ name: "D", is_admin: true, department: 25 },
{ name: "F", is_admin: false, department: 25 },
]

user = User.alluser.select! { |u| u[:is_admin] }
user_hash = user.group_by { |u| u[:department] }
user_hash.each { |k, v| v.sort_by! { |x| x[:name] } }

user_hash =
{20=>
[{:name=>"A", :is_admin=>true, :department=>20},
{:name=>"C", :is_admin=>true, :department=>20}],
25=>
[{:name=>"B", :is_admin=>true, :department=>25},
{:name=>"D", :is_admin=>true, :department=>25},
{:name=>"E", :is_admin=>true, :department=>25}]}



2016年4月22日 星期五

each_with_object 好用的地方

each_with_object 好用的地方

Ex:(多維展開)

{原本}
def org_users(users)
  temp = {}
  users.each do |user|
    temp[user.group] ||= {}
    temp[user.group][user.id] = user
  end
  temp
end

{改良}
users.each_with_object(Hash.new{ |h,k| h[k] = {} }) { |obj, hash| hash[obj.group][obj.id] = obj }



Ex:(類型計算)

x = ["tiger", "tiger", "cat", "tiger", "dog", "cat"]
x.each_with_object(Hash.new(0)) { |obj, counts| counts[obj] += 1 }


2016年4月14日 星期四

『*』的用法


「*」的用法 

把 array 展開成豆號分隔的 參數


Ex1:
numbers = [1, 2, 3]
numbers_with_zero_and_100 = [0, *numbers, 100] # => [0, 1, 2, 3, 100]

 Ex2:

def get_year_month
  year_month ||= params[:year_month] || Date.today.strftime("%Y-%m")
  year_month.split(/-|\/|_/).map { |i| i.to_i }
end
Date.new(*(get_year_month)) # =>  Fri, 01 Apr 2016

2015年10月29日 星期四

麻婆豆腐

材料:
  • 絞肉 600~800克
  • 豆腐 1盒
  • 青蔥
  • 蒜泥或碎蒜

調味:
  • 辣豆瓣醬 2~3匙
  • 醬油 1匙
  • 米酒 1匙
  • 花椒粉 1/2匙
  • 辣椒粉 1/4匙
  • 麻油 1/4匙(用香油也可)
  • 辣椒油(選配)
  • 五香粉 少許(選配)
  • 黑胡椒 少許(選配)
  • 太白粉 少許(選配:最後勾芡用)

方法:
  1. 調味料先行拌好(都混在一起的意思,除了太白粉)
  2. 蒜泥+絞肉炒半熟,加入調味料
  3. 肉熟後加入切塊豆腐,青蔥
  4. 再燒個五分鐘

訣竅:
  • 肉不能太軟,稍微燒久一點就會硬
  • 豆腐進去後要減少攪拌,不然豆腐就碎光了

2015年8月6日 星期四

常用 Rails Gem 整理

for Rails 4 (last update date: 2015/8/6)

# ----------------------------
# Use System
# ----------------------------

# DB - 資料庫
gem 'mysql2'
gem 'pg'
gem 'activerecord-postgis-adapter'
gem 'redis'
gem 'redis-objects', :require => "redis/objects"

# ENV - 環境變數
gem 'settingslogic'

# assets
gem 'sass-rails', '~> 4.0.3'
gem "compass-rails"
gem "compass-susy-plugin"
gem "susy"
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'therubyracer',  platforms: :ruby
gem 'jquery-rails'
gem 'turbolinks'
gem 'asset_sync'

# background jobs - 背景執行
gem 'sidekiq'
gem 'sinatra', '>= 1.3.0', :require => nil
gem 'sidekiq-limit_fetch'
gem 'whenever'

# aws
gem 'aws-sdk-v1'
gem 'aws-sdk'

# unicorn
gem 'unicorn'

# system mionitor
gem 'rollbar'
gem 'newrelic_rpm'


# ----------------------------
# Use ViewRendering
# ----------------------------

# html + form
gem 'jbuilder', '~> 2.0'
gem 'simple_form'
gem 'nested_form'
gem 'slim'
gem 'kaminari'
gem 'chosen-rails'

# file upload - 檔案上傳
gem 'carrierwave'
gem 'mini_magick'
gem 'fog'
gem 'carrierwave_backgrounder'

# front-end
gem 'jquery-ui-rails'
gem 'bootstrap-sass', '~> 2.3'

# editor - 圖文編輯器
gem 'redactor-rails'

# render view helper
gem 'rails_autolink'


# ----------------------------
# Use ActiveModel
# ----------------------------

# gem 'bcrypt', '~> 3.1.7'
# 資料排序
gem 'acts_as_list'

# soft delete
gem 'paranoia', "~> 2.0"

# Tagable - 標籤
gem 'acts-as-taggable-on'

# internal search - 內部搜尋
gem 'ransack'

# 狀態遷移控制
gem 'state_machine'


# ----------------------------
# Use Business logic
# ----------------------------

# devise - 會員登入
gem 'devise'
gem 'devise-async'

# shopping_cart 購物車
gem 'acts_as_shopping_cart', '~> 0.2.1'

# output data - 匯出excel
gem 'rubyzip', '~> 1.0.0'
gem 'axlsx_rails', '~> 0.3.0'

# SEO
gem 'crummy'
gem 'meta-tags', :require => 'meta_tags'
gem 'sitemap_generator'

# routes ues name
gem 'friendly_id', '~> 5.1.0'
# BARCODE img
gem 'barby'

# Email
gem 'mail'

# zip file
gem 'archive-zip'

# http transport
gem 'faraday'


# ----------------------------
# Use Development
# ----------------------------

group :development do
  # capistrano
  gem 'capistrano-rails'
  gem 'capistrano-rvm'
  gem 'capistrano-sidekiq'
  # unicorn
  gem 'capistrano3-unicorn'
  # slack
  gem 'slackistrano', require: false

  gem 'guard-annotate'
  gem 'annotate'
  gem 'awesome_print'
  gem 'xray-rails'
  gem 'pry'
  gem 'pry-rails'
  gem 'pry-remote'
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'guard'
  gem 'http_logger'
  gem 'spring'
  gem 'venus', git: "git@github.com:marsz/venus.git", branch: 'v1.0'
  gem 'rename'
end

group :development, :test do
  gem 'rspec'
  gem 'rspec-rails'
  gem 'factory_girl_rails'
end

group :test do
  gem 'webmock'
  gem 'test_after_commit'
end

group :doc do
  gem 'sdoc', '~> 0.4.0'
end