2013年7月12日金曜日

RailsでMySQLに接続できないヘ(^o^)ノ

Railsでmysql2のgemがインストールできないの続き

gemがインストールできたのでscaffoldしてみたー

Library not loaded: libmysqlclient.18.dylib (LoadError)

また、なんか無いって怒られた(;・∀・)

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

再びscaffoldヘ(^o^)ノ

でけた(Rails4の場合)

これでも動かない場合は…

Connector/C 6.1がいるかもしれない

./bundle/config
UNDLE_BUILD__MYSQL: --with-mysql-config=/usr/local/Connector6.1のぱす/bin/mysql_config

もし、gemのmysqlバージョンとインストールされてるバージョンが違うって言われたら…

MySQL Community Server 5.7.1 m11をインストールすると幸せになるかも

実は…Rails3.2.11の環境ではここまでしないと動かなかった(;・∀・)

Postgres.appみたいなのあれば幸せになれるのになー

( ̄(エ) ̄)彡☆

2013年7月11日木曜日

Railsでmysql2のgemがインストールできないヘ(^o^)ノ

RailsとMySQLで開発してると、mysql2のgemインストールすると…

checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
 --with-opt-dir
 --without-opt-dir
 --with-opt-include
 --without-opt-include=${opt-dir}/include
 --with-opt-lib
 --without-opt-lib=${opt-dir}/lib
 --with-make-prog
 --without-make-prog
 --srcdir=.
 --curdir
 --ruby=/Users/murajun1978/.rbenv/versions/2.0.0-p247/bin/ruby
 --with-mysql-config
 --without-mysql-config
 --with-mysql-dir
 --without-mysql-dir
 --with-mysql-include
 --without-mysql-include=${mysql-dir}/include
 --with-mysql-lib
 --without-mysql-lib=${mysql-dir}/
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-mlib
 --without-mlib
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-zlib
 --without-zlib
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-socketlib
 --without-socketlib
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-nsllib
 --without-nsllib
 --with-mysqlclientlib
 --without-mysqlclientlib
 --with-mygcclib
 --without-mygcclib
 --with-mysqlclientlib
 --without-mysqlclientlib


Gem files will remain installed in /Users/user_name/dev/rails/asa_cloud_system/vendor/bundler/ruby/2.0.0/gems/mysql-2.9.1 for inspection.
Results logged to /Users/user_name/dev/rails/asa_cloud_system/vendor/bundler/ruby/2.0.0/gems/mysql-2.9.1/ext/mysql_api/gem_make.out

An error occurred while installing mysql (2.9.1), and Bundler cannot continue.
Make sure that `gem install mysql -v '2.9.1'` succeeds before bundling.

(゚д゚)!

ならば!
$ bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config

あかん!

ん?ちょっとまてよ…

~/.bundle/config
BUNDLE_BUILD__MYSQL: --with-mysql-config=/usr/local/mysql/bin/mysql_config

BUNDLE_BUILD__MYSQL2: --with-mysql-config=/usr/local/mysql/bin/mysql_config

いけたやん(;・∀・)

そうだよね、mysql2だもんね…

( ̄(エ) ̄)彡☆

2013年7月10日水曜日

Railsで複数カラムのリレーションヘ(^o^)ノ

Railsは複合キーでのリレーションができない(;・∀・)

こんなgemがあったりする → composite_primary_keys

とても便利!

こんな実装を覚えたw
has_one :xxx, conditions: proc { ["id = ?", self.xxx_id] }

結構使えるかもヘ(^o^)ノ

( ̄(エ) ̄)彡☆

2013年7月9日火曜日

Rails4でRSpec(4) ヘ(^o^)ノ

前回のテストケースをDRY

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do
    before :all do
      @user = FactoryGirl.build(:user)
    end

    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it '数字のみ' do
        @user.login_name = '11111'
      end

      it '英字のみ' do
        @user.login_name = 'ssss'
      end

      it '最初の文字は英字' do
        @user.login_name = '111aaa'
      end

      it '必須' do
        @user.login_name = ''
      end

      after :each do
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

( ̄(エ) ̄)彡☆

Rails4でRSpec(3) ヘ(^o^)ノ

前回のはテストになってないwww

specファイルを修正

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 
    before :all do 
      @user = FactoryGirl.build(:user, password: 'murajun1978')
    end

    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user = FactoryGirl.build(:user, login_name: 'user_name_1')
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

正常に保存できる条件でテストしないと意味ない(;・∀・)

( ̄(エ) ̄)彡☆

2013年7月8日月曜日

Rails4でRSpec(2) ヘ(^o^)ノ

昨日のBlogで少しきになるところがあったのでリファクタリング

spec/factories/users.rb
FactoryGirl.define do
  factory :user, :password, class: User do |f|
    sequence(f.login_name) { |n| "user_name_#{n}" } 
    f.password_confirmation { |u| u.password }
    f.admin true
  end
end

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 

    it "正常に保存できる" do
      @user = FactoryGirl.build(:user, password: 'murajun1978')
      expect(@user.save).to be true
    end

    context 'login_name' do
      before :all do
        @user = FactoryGirl.build(:user)
      end

      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user = FactoryGirl.build(:user, login_name: 'user_name_1')
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

Factory_Girlを少しシンプルにしてみましたヘ(^o^)ノ

login_nameは連番(user_name_1..user_name_2.. みたいな)

いい感じになったかな?

( ̄(エ) ̄)彡☆

2013年7月7日日曜日

Rails4でRSpec ヘ(^o^)ノ

Rails3からRails4へアップグレードしてみましたヘ(^o^)ノ

TurnipとCucumberについても近々書こう

Gemfile
source 'https://rubygems.org'

gem 'rails', '4.0.0'

group :development do 
  gem 'sqlite3'
  gem 'better_errors'
  gem 'binding_of_caller'
end

group :test do
  gem 'rspec-rails'
  gem 'spring'
  gem 'turnip'

  gem 'guard-rspec'
  gem 'guard-spring'

  gem 'growl'
  gem 'rb-fsevent'

  gem 'factory_girl_rails'
  gem 'database_cleaner'
end 

group :production do
  gem 'thin'
  gem 'pg'
end

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

gem 'uglifier', '>= 1.3.0'

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

gem 'jquery-rails'

gem 'turbolinks'

gem 'jbuilder', '~> 1.2'

group :doc do
  gem 'sdoc', require: false
end

gem 'bcrypt-ruby', '~> 3.0.0'

Guardfile
guard :rspec, spring: true, turnip: true do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

#  # Capybara features specs
#  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/features/#{m[1]}_spec.rb" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end

app/models/user.rb
class User < ActiveRecord::Base
  has_secure_password

  validates :login_name, uniqueness: true
  validates_presence_of :login_name, :admin
  validates_format_of :login_name, with: /\A[a-z][a-z0-9]*[0-9]\Z/
end

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 
    before :all do
      @user = FactoryGirl.create(:user)
    end
    
    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user2 = FactoryGirl.build(:user2)
        expect(@user2.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

spec/factories/users.rb
FactoryGirl.define do
  factory :user, class: User do |f|
    f.login_name 'murajun1978'
    f.password 'murajun1978'
    f.password_confirmation { |u| u.password }
    f.admin true
  end

  factory :user2, class: User do |f|
    f.login_name 'murajun1978'
    f.password 'sss'
    f.password_confirmation { |u| u.password }
    f.admin true
  end
end

.rspec
--color
--format d

実行結果
User
  #validate
    正常に保存できる
    login_name
      login_nameは数字のみは不可
      login_nameの先頭は必ず英字
      login_nameは重複不可
      login_nameは英字のみは不可
      login_nameは必須

Finished in 0.10709 seconds
6 examples, 0 failures

validateの正規表現で^や$が使えなくなってたねー

( ̄(エ) ̄)彡☆

2013年7月6日土曜日

第2回 RubyMotion もくもく会 Osakaに参加してきたーヘ(^o^)ノ #rubymotionosaka

前回は参加できなかったので…

今日こそは!!!

少し遅れましたが参加できましたヘ(^o^)ノ

場所は前回と同じ1×1株式会社さんです(前回参加してませんが…)

勉強会の場所を提供してくれるのは本当にありがたいですー

あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!

Apple TVでコードレビューもすーいすい

僕が本日試したのはProMotion

naoyaさんのブログで紹介されていて興味津々だったので試してみました

GitHubにはTutorialもあるのでよい

もくもく会の最後にProMotionを使ったコードと使わなかったコードを比べてみました

みなさんの反応も上々www

帰宅してもう少し調べてみるとTeacupにも対応しているみたい

期待大ヘ(^o^)ノ

現地ではbundle installでpath指定すると動かなかったのですが…

帰宅しチャレンジするとすんなり動きました(;・∀・)

よくわからない…

rakeするとGemがないとメッセージはでるもののちゃんと動いています

楽しかったー

次回も参加するぞーヘ(^o^)ノ

( ̄(エ) ̄)彡☆