GitHub+SourceTreeで複数アカウント設定

会社用リポジトリとプラベート用リポジトリで、複数アカウントをGitHub連携できなかったため、そのメモ。

仕組み

  • GItHubのURLごと(ドメイン+サブドメインの組み合わせごと)にパスワードがCredentialsという名前でキーチェーンに保存される
  • キーチェーンは アプリケーション > ユーティリティ > キーチェーン > (ログインメニュー選択)GitHub Credentials で存在を確認できる
  • しかし、GitHubはドメインのスラッシュ以下にアカウント名が含まれているため、Credentialsが複数アカウントごとに作成されない。例えば以下2つのリポジトリは1つしかCredentialsが作成できない。

対応方法

OAuthのアカウント連携をした上で、リポジトリURL「github.com」の前に「アカウント名@」を含めてSourceTreeに設定する。

  • 256haxがGitHubアカウント名だった場合 → https://256hax@github.com/256hax/tanebox.git
  • tarou-yamadaがGitHubアカウント名だった場合 → https://tarou-yamada@github.com/hanami/hanami.git

    もしすでにキーチェーンを作成している場合

    キーチェーンにある該当の「GitHub Credentials」を削除して、上記の「対応方法」を再度設定する必要がある。一度作成されてしまっているとうまくアカウントが分けられない。

    よくある症状

    アカウントがうまく分けられていないと、プッシュした時に「Pushing to [リポジトリ名]」のままで永遠に終わらない ← これはアカウント認証が通らないことが原因。2つアカウントがあったとして、どちらか一方のリポジトリのプッシュは成功するが、もう一方は成功しない(Pushing toが終わらない)という症状がでる

    参考サイト

    GitHubの複数アカウントを使い分けるならSSHよりhttpsの方がいいんじゃね?という話

    Written with StackEdit.

    Rails5で自作クラスの読み込み(app配下に置く)

    自作のクラスやモジュールを読み込む場合、 Rails4だと

    config.autoload_paths += %W(#{Rails.root}/lib)

    みたいなのをconfig/application.rbに設定したかと思いますが、
    Rails5ではこれを記述するとエラーが出ます。

    ■対応策 A案
     app配下は自動で読み込まれるため、そこに自作クラスを置く。
     (app配下にあるとわかりやすい&挙動調べるときはまずここを見るかと思いますので
      個人的には素直にここが最適かと思います)

    以下、設定例

    [app/lib/foo_bar.rb] libフォルダとfoo_bar.rbは自分で作る
    class FooBar
      def hi
        return “hi.”
      end

      def bye
        return “Good bye!”
      end
    end

    [app/controllers/users_controller.rb] 例のためcontrollerかましています
      def index
        @foo = FooBar.new
      end

    [app/views/users/index.html.erb]
    <%= debug @foo.hello %> #=> hi
    <%= debug @foo.bye %> #=> Good bye!

    ■対応策 B案
     任意の場所libフォルダとかに自作クラスを置いてrequireで読み込む。

     以下、設定例

    [lib/hoge.rb] foo_bar.rbは自分で作る
    class Hoge
      def hey
        return “hey there.”
      end
    end

    [app/controllers/users_controller.rb] 例のためcontrollerかましています
      require ‘./lib/hoge’

      def index
        @hoge = Hoge.new
      end

    [app/views/users/index.html.erb]
    <%= debug @hoge.hey %> #=> hey there.

    ■対応策 C案
     Rails4みたいにautoloadする設定を入れる。

    Rails5のproduction環境でlib/配下のクラス読込みがNameErrorになるのはautoloadが無効化されたからだった

    ■参考サイト
    Rails 5 ignoring /lib class? 
     上記の回答では、config/application.rbでrequireしろ、という内容です
    Railsアプリのモジュールはどこに置くべきか問題 (公開版)
    ・読み込むための命名規則(ファイル名、設置場所に伴うクラス名・メソッド名)が厳密に定義されているので要注意

    Rails5でSQLiteからPostgreSQLに変更した時のメモ

    ■PostgreSQL側でCREATEDB権限がない時のエラー
    ———————————————————————
    $ rails db:setup
    PG::InsufficientPrivilege: ERROR:  permission denied to create database
    ———————————————————————
    config/database.ymlで設定書いたユーザーにCREATEDB権限があるかどうか、PostgreSQL側で確認する。

    ■CarrierWaveで複数画像を投稿するとエラー
    1.SQLiteとPostgreSQL/MySQLで実装方法が異なる。PostgreSQLの実装にする。
    (参考)CarrierWave –  Multiple file uploads
    (参考)CarrierWave 複数の画像をコード三行で一つのカラムに保存する ※PostgreSQL/MySQLの実装方法でSQLiteではない

    2.複数画像を投稿時に以下エラーが出る場合は構文を書き間違えている可能性あり。
    ———————————————————————
    TypeError in UsersController#create

    no implicit conversion of nil into String
    ———————————————————————
    (参考)Stack Overflow – “no implicit conversion of nil into String” error for carrierwave multiple image upload
    「mount_uploaders」ではなく「mount_uploader」と書く。

    ———————————————————————
    # app/models/users.rb
    class User < ApplicationRecord
      # 画像1つのみアップロードする場合。imageカラムに格納指定。
      mount_uploader :image, ImageUploader
      # 複数画像アップロードする場合。image_anotherカラムに格納指定。
      mount_uploaders :image_another, ImageUploader
    end
    ———————————————————————

    nio4rインストールエラーはxcode起動して同意ボタン

    bundle installしたときの、nio4rインストールエラーはxcodeがないとか動かせないとからしい。
    ERROR:  Error installing nio4r:
        ERROR: Failed to build gem native extension.
    自分の場合は、macでxcodeを起動したら同意ボタン押せっていう画面出てたので、それをクリックしたらbundle install成功した。xcodeを今まで起動してなかったか、xcodeのverアップしたから同意待ち(なのでxcode起動できない)になってたようです。

    エラー「Rails is not currently installed on this system」

    rails -vが突然できなくなった。Railsがないと言われる。
    ——————————————–
    $ rails -v
    Rails is not currently installed on this system. To get the latest version, simply type:

        $ sudo gem install rails

    You can then rerun your “rails” command.
    ——————————————–

    railsの実行場所を調べる。
    ——————————————–
    $ which rails
    /usr/bin/rails
    ——————————————–

     ~/.rbenv/shimsをパス通していないといけないのだが、$PATHを調べるとちゃんと通ってる。
    ——————————————–
    $ echo $PATH
    ~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
    ——————————————–

    railtiesをもう一回インストールする。
    ——————————————–
    $ rbenv exec gem install railties
    $ rbenv rehash
    ——————————————–

    直った。
    ——————————————–
    $ rails -v
    Rails 5.1.4
    ——————————————–

    CakePHP x さくら x サブドメイン で Internal Server Error

    下記構成で、
    
    
     CakePHP 1.3.x
     さくらインターネット
     サブドメイン
     
    Internal Server Error が出た。
     
     
    ↓この設定通りにやったら一発で解決(ありがとうございます)
    
    
     [CakePHP] さくら で「500 Internal Server Error」 Web Sytem | AIDREAM

    他のサイトにも設定方法が載ってたが、
    上記サイトの設定でしか動かなかった。

    これの対策 → CakePHP: URL rewriting is not properly configured on your server

    ■現象
    CakePHPインストール&設定直後にエラー

    URL rewriting is not properly configured on your server

    ■原因
    リライト周り、.htaccess周りの設定ミス

    ■対策
    ここ見て設定通りになっているか確認する。
    ※英語ですが、なんとなく見ていけば分かると思います。

    3.3.4 Apache and mod_rewrite (and .htaccess)

    ケース1.
    .htaccessの置き場所が間違ってた。
    (色々自分でいじってて、うっかり移動させてた)
    ケース2.
    CakePHPルート直下の.htaccessファイルがなかった。
    (なぜかデフォルトで設置されてなかったので
    上記リンクの手順書をもとに作成した)

    ■参考サイト
    これも英語ですがなんとなく流し読みで
    今回の原因が特定できました。

    stackoveflow – CakePHP: URL rewriting is not properly configured on your server

    stackoverflowは技術関連の質問サイトで、英語なのですが
    このサイトで結構、解決することが多い。英読の敷居が高いので
    アレですが、stackoverflowだけはちゃんと読むようにしています。

    MAMP エラーメモ on MacBook Air

    エラー関連のメモ
    
    ■環境
     MacBook Air MC504J/A
     MAMP バージョン 2.0.5 (2.0.5)
    
    ■エラー内容
     【エラー発生までの手順】
      MAMPインストール
       ↓
      MAMP環境設定からポート番号を「Apache とMySQL を標準ポートに設定」を
      選択する。
       ↓
      MAMPがサービスを自動的に再起動するがMySQLだけ起動しない。
       ↓
      PHPMyAdminにアクセスすると次項のエラー
    
     【エラー内容】
      PHPMyAdminを選択すると下記エラー。
     「#2002 – サーバが応答しません (あるいはローカルの MySQL サーバのソケットが正しく設定されていません)」
    
     【対策】
      いろんなブログに書かれていることをやったが解決できず。
      結局、「環境設定」で何か変更したあとは、Mac自体を
      再起動することで解決。
    
     【原因】
      推測だけど、たぶんサービス(Apache, MySQLなど)がうまく再起動できないで
      残ってしまっているのかと。詳細な原因不明。
    
     【備考】
      MAMPのIFrameもちょっとクセがあるので下記も実行。
      ・ブラウザキャッシュをクリアする
      ・ブラウザ自体も閉じてから再度アクセスする
     
     【追記情報】
      ・MAMPアプリから何かしら設定を変えた場合は必ず 
       Mac自体の再起動が必要みたいです。
       (サービスを指定して再起動でもOKだと思います)