既存コードをforkして開発環境サーバにcloneして相対パス指定で独自コードを追加したかった

githubからforkする
forkしたリポジトリを開発サーバ上にcloneしてくる
アプリケーションのGemfileに追加する

gitオプションでローカル指定できました。
そうか。gitとgithub混同してた。
refオプションでリビジョン(github上のSHAと同じ、fork元repoのSHAとForkしたrepoのSHAは同じ)

gem 'hogehoge', :git => '/Users/m__z/hogehoge', :ref => 'abababa'

Gemfileをさらしてみる

前置きです。開発に超便利なgemあるよーって記事ではございません。


SpreeのCSV Import/Exportエクステンションで
datashiftという超素晴らしいgemをbundle installしました。
https://github.com/autotelik/datashift

ただ、最新版が自分の環境で動かない。

入らなかったり、入っても動かなかったりすると一応issueとかgoogle groupsを見にいくのですが、自分の使っているものが必ずしもEdgeとは限りません。
なるべく最新にするようにメンテしていれば、なるべく回避できるかも、と言ってしまえばそれまでですが。

でバージョンを下げると入りました。

I think deeply each Gemfile is one of the most important property of living lib-versioning.

なんかね。
このバージョンだとこれが動くよーっていうことがわかるってありがたい話かなと思いまして。
Bundlerはめちゃめちゃ素晴らしい仕組みだけど、もう少し先の、生きた情報といいますか。

なので、ほかのプロジェクトのgemファイルとかめちゃ興味あります。
gemファイルSNSとかあればいいのに(謎)。

ということでごちゃごちゃと。

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.4'

# Use sqlite3 as the database for Active Record
gem 'mysql2'

# Use SCSS for stylesheets
gem "sass-rails", "~> 4.0.2"

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', '0.11.0beta8'
gem 'therubyracer', platforms: :ruby


# Use jquery as the JavaScript library
gem 'jquery-rails'

# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.2'

group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end

# Use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.1.2'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

gem 'spree', '2.1.4'
gem 'spree_gateway', :git => 'https://github.com/spree/spree_gateway.git', :branch => '2-1-stable'
gem 'spree_auth_devise', :git => 'https://github.com/spree/spree_auth_devise.git', :branch => '2-1-stable'


#gem 'rails-i18n'

group :development do
# ER図出力ライブラリ
  gem 'rails-erd'
  gem 'railroady'
# 簡易プロファイラ
# 画面左上に測定値
  gem 'rack-mini-profiler'
# rails pre-loader
#  gem "spring"
# passenger auto-restart monitor
#  gem 'guard-passenger'
# デプロイ
#  gem 'capistrano'
#  gem 'capistrano-ext'
#  gem 'capistrano-rails'
#  gem 'capistrano-rbenv', github: 'capistrano/rbenv', branch: 'master'
gem 'better_errors'
end

gem 'spree_i18n', github: 'spree/spree_i18n', branch: '2-1-stable'
gem 'activemerchant' , github: 'Shopify/active_merchant'
gem 'activeadmin', :github => "gregbell/active_admin", branch: 'master'
gem 'newrelic_rpm'
gem 'log4r'
gem 'libxml-ruby'

#  recommend engine
gem 'redis'
gem 'hiredis'
gem 'recommendify'

#  spree extension gem
#  official gems
gem 'spree-bank-transfer'
gem "spree_product_zoom", :git => "git://github.com/spree/spree_product_zoom.git", branch: '2-1-stable'
gem 'spree_editor', github: 'spree/spree_editor', branch: '2-1-stable'

#gem 'datashift', '~> 0.14.0'
gem 'datashift', '~> 0.13.0'
gem 'datashift_spree'

#  local gems
#
#

コントローラに含まれるメソッドを確認する

ある程度開発を進めていくと、時々、メソッドをどこにやったか直ぐに思い出せなくなる健忘症の僕です

irb(main):001:0> ApplicationController.action_methods
=> #<Set: {"authenticate_master_user!", "current_master_user", "set_debug_mode", "to_sjis", "to_utf8", "_convert_charset", "spree_login_path", "spree_signup_path", "spree_logout_path"}>
irb(main):002:0> Spree::BaseController.action_methods
=> #<Set: {"spree_responders", "spree_responders=", "_callback_before_48", "ssl_allowed_actions", "ssl_allowed_actions?", "ssl_allowed_actions=", "ssl_supported?", "spree_login_path", 
"spree_signup_path", "spree_logout_path", "permitted_attributes", "permitted_address_attributes", "permitted_checkout_attributes", "permitted_image_attributes", 
"permitted_inventory_unit_attributes", "permitted_line_item_attributes", "permitted_option_type_attributes", "permitted_option_value_attributes", "permitted_payment_attributes", 
"permitted_product_attributes", "permitted_product_properties_attributes", "permitted_property_attributes", "permitted_return_authorization_attributes", "permitted_shipment_attributes",
"permitted_source_attributes", "permitted_stock_item_attributes", "permitted_stock_location_attributes", "permitted_stock_movement_attributes", "permitted_taxon_attributes", 
"permitted_taxonomy_attributes", "permitted_user_attributes", "permitted_variant_attributes", "permitted_order_attributes", "build_searcher", "unauthorized", "store_location", 
"try_spree_current_user", "redirect_back_or_default", "ensure_api_key", "authenticate_master_user!", "current_master_user", "set_debug_mode", "spree_path", "spree_url", 
"rails_info_properties_path", "rails_info_properties_url", "rails_info_routes_path", "rails_info_routes_url", "rails_info_path", "rails_info_url", "spree_current_user"}>

なので
action_methods
という名前だけ覚えました。

active_adminのassets precompileがこけた

production環境でprecompileしようとしてこけた。

bundle exec rake assets:precompile RAILS_ENV=production
rake aborted!
NoMethodError: undefined method `environment' for nil:NilClass
  (in /home/m__z/public_html/railsapp/spree/app/assets/stylesheets/active_admin.css.scss)
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-rails-4.0.1/lib/sass/rails/importer.rb:84:in `evaluate'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-rails-4.0.1/lib/sass/rails/importer.rb:70:in `engine_from_path'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-rails-4.0.1/lib/sass/rails/importer.rb:35:in `find'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/import_node.rb:54:in `block in import'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/import_node.rb:53:in `each'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/import_node.rb:53:in `import'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/import_node.rb:28:in `imported_file'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/import_node.rb:37:in `css_import?'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:217:in `visit_import'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:37:in `visit'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:100:in `visit'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:53:in `map'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:53:in `visit_children'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:109:in `block in visit_children'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:121:in `with_environment'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:108:in `visit_children'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:37:in `block in visit'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:128:in `visit_root'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:37:in `visit'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:100:in `visit'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:7:in `visit'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/tree/root_node.rb:20:in `render'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/engine.rb:315:in `_render'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sass-3.2.14/lib/sass/engine.rb:262:in `render'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/sass_template.rb:53:in `evaluate'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/tilt-1.4.1/lib/tilt/template.rb:103:in `render'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/context.rb:197:in `block in evaluate'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/context.rb:194:in `each'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/context.rb:194:in `evaluate'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/processed_asset.rb:12:in `initialize'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/base.rb:374:in `new'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/base.rb:374:in `block in build_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/base.rb:395:in `circular_call_protection'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/base.rb:373:in `build_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/index.rb:94:in `block in build_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/caching.rb:58:in `cache_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/index.rb:93:in `build_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/base.rb:287:in `find_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/index.rb:61:in `find_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/bundled_asset.rb:16:in `initialize'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/base.rb:377:in `new'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/base.rb:377:in `build_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/index.rb:94:in `block in build_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/caching.rb:58:in `cache_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/index.rb:93:in `build_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/base.rb:287:in `find_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/index.rb:61:in `find_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/manifest.rb:211:in `block in find_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/manifest.rb:257:in `benchmark'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/manifest.rb:210:in `find_asset'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/manifest.rb:119:in `block in compile'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/manifest.rb:118:in `each'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/sprockets/manifest.rb:118:in `compile'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-rails-2.0.1/lib/sprockets/rails/task.rb:60:in `block (3 levels) in define'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-2.12.1/lib/rake/sprocketstask.rb:146:in `with_logger'
/home/m__z/public_html/railsapp/spree/vendor/bundle/ruby/1.9.1/gems/sprockets-rails-2.0.1/lib/sprockets/rails/task.rb:59:in `block (2 levels) in define'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

ためしにActiveAdminのcssとjsを削除するとSpreeのcssとjsで発生した。
結論として、ActiveAdminのせいではなく、sass-railsのバージョンを上げることで直った。

gem 'sass-rails', '~> 4.0.0'

これを以下に修正

gem 'sass-rails', '4.0.2'


参考リンク | undefined method `environment' for nil:NilClass #3005
https://github.com/gregbell/active_admin/issues/3005

deface のターゲットマッチの確認方法

こんな方法があったのでメモ

$ bundle exec rake deface:test_selector['spree/layouts/spree_application','erb[loud]:contains("spree/shared/header")']
Querying 'spree/layouts/spree_application' for 'erb[loud]:contains("spree/shared/header")'
---------------- Match 1 ----------------
<%= render :partial => 'spree/shared/header' %>

thanks!
http://stackoverflow.com/questions/20547118/unable-to-override-an-existing-partial-using-deface

spree rails4.0.2 > rails4.0.4 アップデート

おはようございます。
spreeは2-1-stableを愛用しているm__zです。

今回はアップデート手順です。

1) Gemfile の rails を 4.0.4 に書き換えます

$ bundle update rails

2) spreeのgemをアップデート

Gemfile の spree は以下のように。

gem 'spree' , :git => 'https://github.com/spree/spree.git', :branch => '2-1-stable'
$ bundle update spree

以上でgem関連はアップデートが完了します。

DBスキーマの差分については

$ bundle exec rake railties:install:migrations

しますと

Copied migration 20140407224213_add_deleted_at_to_spree_prices.spree.rb from spree
Copied migration 20140407224214_add_auto_capture_to_payment_methods.spree.rb from spree
Copied migration 20140407224215_default_variant_weight_to_zero.spree.rb from spree
Copied migration 20140407224216_add_translations_to_option_value.spree_i18n.rb from spree_i18n

マイグレーションファイルがappフォルダにコピーされてきます。最高です。あとは

$ bundle exec rake db:migrate

でOK

mysqlのダンプ俺メモ

mysqldump --user=USER --password=PASSWORD --single-transaction --extended-insert=false --default-character-set=utf8 --order-by-primary "mydb" "zipcode" > "mydb_dbbk.sql"

    • order-by-primary PKまたは最初のユニークインデックスでソート(Dump each table's rows sorted by its primary key, or by its first unique index)
    • extended-insert=true/false 1行のINSERT文に複数のvaluesを含む/含まない
    • single-transaction テーブルをロックせず、トランザクションの範囲でバックアップ

PKでソートするかしないかで速度的に雲泥の差が出るようです。


あるいはこちらのほうが速い
mysqlコンソール上で INTO OUTFILEする

export
SELECT * FROM `DB名`.`TABLE名` ORDER BY id asc INTO OUTFILE "/tmp/data.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';

import
LOAD DATA LOCAL INFILE "C:/Users/XXX/Documents/MySQL/data.csv" INTO TABLE table名 FIELDS TERMINATED BY ',' ENCLOSED BY '"';