2012年5月12日土曜日

Hamamatsu.rbで発表するネタを作るためにHerokuも復習中

Rails3チュートリアルのアプリがデプロイできねえ。

2012-05-12T06:22:16+00:00 app[web.1]: !! Unexpected error while processing request: no such file to load -- active_record/railtie

→Gemfileに追記&bundle installしてデプロイしたらうまくいった。

gem 'activerecord'
gem 'actionmailer'
gem 'activeresource'
gem 'pg'





ActionViewがどうたら・・・

→config/environments/production.rbを書き換えたらうまくいった。

config.assets.compile = true        #falseとtrueに



数時間も調べないとわからない問題が多いのが困る…バージョン依存もあったりするし。
やっぱり何か作るならASP.NETの方が楽なのかなあ…

2012年5月8日火曜日

Windows 2000にTortoiseGitをインストール・・・できなかった

素のWindows2000だとmsiがインストールできないので以下が必要。

Windows Installer 3.1 Redistributable (v2)

でもインストール中に「XP SP3以上じゃないと駄目だから!!」って言われて駄目だった。
なんとかしてLinux入れるしかないのか…

2012.05.12 追記

普通のコマンドラインベースのgitなら入った。gitkで履歴を見れるし結構十分っぽい

2012年5月6日日曜日

AppHarborと格闘中(3)

とりあえず、GWが終わるとしばらく更新できそうに無いのでAppHarborの印象まとめ。

・無料で使える範囲で結構遊べる。
・Windows OSなので、恐らくWindowsで動くEXE、DLLはだいたい呼び出して使える。
・Tempフォルダを使えばサーバー上でファイルの読み書きができる。
・GitにPushするだけでサーバー側でビルドしてくれるし、結果も割りと早く表示されるので、問題解決にかかる時間は短い。

Windowsで動くEXE/DLLを呼び出せるってのはPaaSとして結構強みな気がする。
今のところどんな面白いことができるか思いつかんけど。

2012年5月5日土曜日

AppHarborと格闘中(2)

Softalkにしゃべらせられないか試してみたけど無駄骨だった…
結局TEMPフォルダにファイルを吐けることがわかったことだけが進展。

string wabefiletitle = DateTime.Now.ToString("yyyyMMddhhmmss") + Guid.NewGuid().ToString() + ".wav";
string wavefilename = Path.GetTempPath() + wabefiletitle;

しゃべらせるならアドレス渡すだけでWAV吐いてくれるgoogle翻訳しかないのかなぁ。でも非公式だし難しそう。

2012年5月3日木曜日

AppHarborと格闘中(1)


だんだんAppHarbor以外でも詰まるようになってきた。

AppHarbor周り

・ソリューション作成時にASP Net WebサイトではなくASP.NET WEBアプリケーションを選ばないとうまくいかない。
その場合、AppHarborがprecompiledしてるからApp_Code入れるなよ~的なエラーを吐く。
なぜかbin/objフォルダの内容も上げないとうまくいかない。自分だけかも・・・

・.Net Framework 4.5には対応していない。Visual Studioのプロジェクトを右クリック→プロパティ→アプリケーション→対象のフレームワークから4に変更する必要がある。

LINQ周り

せっかくなのでLINQにも挑戦してみました。

・LINQでデータベースとやり取りするにはdbmlファイルを使ってマッピングするのが早い。というか私にはこの方法しか無理。
Visual Studioから追加できる。LINQ to SQLクラスという名前になっている。

・データをSELECTしてくるときは以下みたいな感じ。

DataClassesDataContext dc = new DataClassesDataContext(GetConnectionString());
dc.Connection.Open();

var query = from b in dc.BATTLELOG
            orderby b.LOGID descending
            select new
            {
                戦闘日付 = string.Format("{0:yyyy/MM/dd}", b.BATTLEDTE),
                登録者 = b.ENTUSR,
                自チーム名 = b.TEAMNAME,
                相手チーム名 = b.OTEAMNAME,
                戦闘マップ = b.MAPM.MAPSN,
                種類 = b.BATTLEM.BATTLETYPENAME,
                勝敗 = b.WINLOSE,
                時間帯 = b.TIMEMESH1.TIMEMESHSN + " 時",
                コメント = b.NOTE
            };

//SELECT結果をグリッドビューに表示
gv.DataSource = query;
gv.DataBind();

最初はConvert.ToStringでキャストを試みたけどうまくいかんかった・・・string.Formatだと何故か成功。

・INSERTするときは以下みたいな感じ。

BATTLELOG blog = new BATTLELOG
{
    ENTUSR = txtEntUsr.Text,
    TEAMNAME = txtTeamName.Text,
    OTEAMNAME = txtOTeamName.Text,
    MAPCD = txtMap.SelectedValue,
    BATTLETYPE = txtBattleType.SelectedValue,
    WINLOSE = txtWin.Text,
    BATTLEDTE = Convert.ToDateTime(txtBattleDate.Text),
    TIMEMESH = txtTimeMesh.SelectedValue,
    NOTE = txtNote.Text
};

dc.BATTLELOG.InsertOnSubmit(blog);
dc.SubmitChanges();

本当はトランザクションとかいろいろ張ってるけど割愛!!

・戦闘のn件だけ取りたい、という場合はSQLだとrownumとか使っていたが、LINQの場合はTakeを使う。
以下はLOGIDで降順ソートして先頭100件だけ取ってくる例。

var query = (from b in dc.BATTLELOG
            orderby b.LOGID descending
            select new
            {
                戦闘日付 = string.Format("{0:yyyy/MM/dd}", b.BATTLEDTE),
                登録者 = b.ENTUSR,
                自チーム名 = b.TEAMNAME,
                相手チーム名 = b.OTEAMNAME,
                戦闘マップ = b.MAPM.MAPSN,
                種類 = b.BATTLEM.BATTLETYPENAME,
                勝敗 = b.WINLOSE,
                時間帯 = b.TIMEMESH1.TIMEMESHSN + " 時",
                コメント = b.NOTE
            }).Take(100);

Visual Studio周り

・エディットコンティニュ(デバッグ中にコードを書き換える機能)はVisual Studioのプロジェクトを右クリック→プロパティ→WEB→一番下の「エディットコンティニュを有効にする」をONにしないと使えない。

2012年5月2日水曜日

GWが終わったらきっと更新も止まる

GW中AppHarborで遊んでいたらあまりに詰まってきたので、詰まった履歴を忘れないように(あるいは他の人に役立つように)メモしていきます。

AppHarvorがC#好きな人のためのHerokuとして認知度が高まるといいなあ…


とりあえず"AppHavor"でググってもわからない範囲でメモるよ!!


・自分のローカル環境
Windows 7 64bit
Visual Studio 11 beta
msysGit
TortoiseGit

・自分のAppHavor環境
1ワーカー
アドオン:SQL Server Free(20MB)

AppHavor周り

・たまに"Web.configに追記が必要~"みたいな説明があるけど、追記しなくてもとりあえずデプロイはできる

・SQL ServerはconnectionStringをweb.configから持ってくるのが楽。


string connectionString = ConfigurationManager.AppSettings["SQLSERVER_CONNECTION_STRING"].ToString();


デプロイすると、自動的にweb.configを置換してくれる。
具体的には以下のあたりを置換する。


  <appSettings>
    <add key="SQLSERVER_CONNECTION_STRING" value="Server=ホスト名\SQLEXPRESS;Database=データベース名;User ID=ユーザーID;Password=パスワード;" />
  </appSettings>
</configuration>


Visual Studioのプロジェクトを右クリック→プロパティ→設定からやってもうまくいかないので、直にweb.configに書いたほうが早いみたい。

・SQL Serverで列をvarcharにするとハデに文字化けする。nvarcharに変更するのが手軽な解決策だったけど他に手段があるかも。

・AppHavorで作成した無料DBはMicrosoft SQL Server Management Studioから開ける。でもインポート/エクスポートがうまくいかなかった…
今はローカルDBからスクリプト作成した後、無料DBで流すようにしてる。

・環境が海外なので、MaskEditExtenderでMaskType=Dateとか指定すると、うまくいかないことがある。

例:2012/05/02→0002/20/12

CultureNameプロパティにja-JPを指定してやると解決する。



・・・なんか一投稿が長すぎると見難いから続きはまた明日!!