Github for Macで起動→即落ちという現象に見舞われた

普段ソースコード管理にGithub for Macを使っているのだけど、ある時突然Commit & Sync使用とするとアプリが落ちる上に、その後何度アプリを起動しても即落ちるという現象に見舞われた。せっかくなので、どのように解決した記しておこうと思う。

アプリ再起動→落ちたときの画面を復元→再度落ちる という無限ループ

ソースを修正し、Github for Macを起動。リポジトリを選択し、historyを表示。すると落ちる。原因不明。再度Github for Macを起動するも、落ちたときと同じHistoryの画面で起動するので、再度同じように落ちる。

アプリが落ち続けている間はどうしようもないので、とりあえず起動するようにしたい。「落ちたときと同じ状態で起動されるという事は、どこかに設定ファイルなりキャッシュを保持しているのでは?」と思い、とりあえずアプリを動かすためにそれらをクリアする事にした。

アプリの削除だけでは設定・キャッシュは消えない

単純にGithub for Macをゴミ箱に突っ込むだけでは設定・キャッシュファイルは削除されない。そこで今回はAppCleanerを使う事にした。

AppCleanerにGithub for Macのアイコンを突っ込むと関連するファイルが表示される。

一覧一番上がアプリ本体なので、それ以外のファイルを選択して削除する。これで設定関連がクリアされるのでGithub for Macが立ち上がるようになった。

ローカルソースの退避とリポジトリからのクローン

設定関連が全て削除されたので、githubへのログイン情報なども再度設定する必要がある。とはいえ、リポジトリ本体はサーバーにあるので、認証情報を入れてつながってくれれば、あとは特にどうということはない。

この時、ローカルHDDを検索してローカルのリポジトリクローンが一覧として上がってくる場合があるが、異常を起こしたローカルリポジトリを再読み込みすると、再度同じ現象に見舞われてループに陥ってしまうので、読み込まないように気をつける。もちろん、異常を起こしたローカルリポジトリ以外は読み込んでサーバーリポジトリと再同期してしまって構わない。

この後github for Macでサーバーのリポジトリからローカルにクローンするが、異常を起こしたローカルのリポジトリクローンは、異常を起こした事により最新ソースがコミットされていない。その為、ローカルのソースを一度フォルダごと別名にリネームするなり別の場所に移動するなりして、最新のソースを退避させる。

その後Github for Macでサーバーのリポジトリを元あった場所にクローンする。クローンが完了したら、退避していた最新のソースをローカルのクローンに上書き。github for Macで変更を検知したらCommit & Sync。とりあえずこれで復旧できた。

結局原因はなんなのさ

というのが依然、不明のままなんだけど。最初、ソースの記述内容に特殊な文字等が紛れ込んでいて異常を引き起こしていたのかと思ったけど、再度そのソースを上書きして正常に動作しているところをみると、どうもそうではない気もする。

そのうちバージョンアップで治ってくれるのを期待するか。

『はじめる!Rails3 (1)』をRails 3.1で読み進めるときのポイント その2

前回の続き。『はじめる!Rails3(1)』(黒田努 著 / 達人出版会)をRails 3.1で読む場合のポイントについて。

7.3 スタイルシートの作成

書籍では public/stylesheetstasks.css を作成するように記述されているが、これも前回の画像ファイルと同じで assets/stylesheets に配置する。また、tasks.css を自分で作成するのではなく、既に用意されている tasks.css.scss に記述する。

scss (Sassy CSS)は、CSSの文法に限りなく近づけつつ新たな文法を導入して拡張したもの。Rails 3.1から標準で入った。

CSSと互換性があるため、書籍の記述の通りに

table.tasks {
  width: 560px;
  margin: 5px auto;
  background-color: #eee;
  border-collapse: collapse;
  border-spacing: 0;
}

table.tasks tr {
  border: solid 1px #ccc;
}

table.tasks td {
  padding: 5px;
}

table.tasks col.name {
  width: 320px;
}

table.tasks col.due_date {
  background-color: #ddd;
}

とも書けるが、次のように書く事もできる。

table.tasks {
  width: 560px;
  margin: 5px auto;
  background-color: #eee;
  border-collapse: collapse;
  border-spacing: 0;

  tr {
    border: solid 1px #ccc;
  }
  td {
    padding: 5px;
  }
  col.name {
    width: 320px;
  }
  col.due_date {
    background-color: #ddd;
  }
}

table.tasksの中にネストする事で冗長な記述を省略でき、少しスッキリする。

ここまでのポイントで、Rails 3.1を使用した場合もとりあえずエラーが出ずに進められるはず。

『はじめる!Rails3 (1)』をRails 3.1で読み進めるときのポイント その1

『はじめる!Rails3(1)』(黒田努 著 / 達人出版会)はRails3.0をベースに記述されている為、3.1環境でチュートリアルを進めていくと何点かつまずくポイントがある。自分用のメモとして記述しておく。

2.3 Ruby on Railsのインストール

以下のコマンドでrailsをインストールするが、1行だけエラーが出た。

$ gem install rails

とすると、結果ログに1行

$ file 'lib' not found

と表示される。
これは、以下の方法で解決できる・・・らしい。が、今回はスルーして先に進めた。得に問題は起こっていないので、スルーでも大丈夫だと思われる。

特にそのままでも問題もなさそうだったけれど、気になったので調べてみた。
そしたらlibディレクトリを作ったら無事解決しました。

cd /usr/local/lib/ruby/gems/1.9.1/gems/rails-3.0.5
sudo mkdir lib
sudo gem install rails

NS2とかLinuxのブログ : gem install railsでFile not found: lib

5.5 部分テンプレート

webアプリのロゴ画像を表示する部分。画像ファイルを public/images ディレクトリ配下に置くように指定されるが、ここにおいても表示されない。

これはRails 3.1からAsset Pipelineという仕組みが導入された為で、public/imagesではなく、assets/imagesに配置する。JavaScriptやStylesheetも同様で、それぞれassets/javascriptsassets/stylesheetsに配置する。

6.2 マイグレーション

新しくテーブルを作成するマイグレーションスクリプトについて。書籍内では以下のようにself.upとself.downが定義されている。

Class CreateTasks <ActiveRecord::Migration
  def self.up
    create_table :tasks do |t|
      t.string :name
      t.text :description
      t.date :due_date
      t.boolean :done

      t.timestamps
    end
  end

  def self.down
    drop_table :tasks
  end
end

Rails3.1からはこれが変更になり、upとdownをまとめてchangeメソッドで記述するようになった。以下のように書く。

Class CreateTasks <ActiveRecord::Migration
  def change
    create_table :tasks do |t|
      t.string :name
      t.text :description
      t.date :due_date
      t.boolean :done

      t.timestamps
    end
  end
end

selfが抜けてインスタンスメソッドになっている点に注意。

次回へ続く