2012年12月8日土曜日

rails 4のインストール方法


次回のHamamatsu.rbで使うらしいのでインストール。


ruby 1.9.3をインストール。1.9.3以上ではないとRails 4は動きません。
rvm install 1.9.3-head

1.9.3をデフォルトで使うように設定。
rvm use 1.9.3 --default

gemセットを作成して使うように設定
rvm gemset create rails4
rvm gemset use rails4
rvm gemset use rails4 --default

Rails3をインストール。
gem install rails -v 3.2.9

githubからrailsを取得。
git clone git@github.com:rails/rails.git

フォルダ移動
cd rails/railties/bin

myappを作成
./rails new myapp --skip-bundle

gemfileを書き換えます

gemfile


source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0.beta', github: 'rails/rails'

gem 'activeresource', git: 'git://github.com/rails/activeresource', require: 'active_resource'
gem 'activerecord-deprecated_finders', git: 'git://github.com/rails/activerecord-deprecated_finders.git'
gem 'journey',   :git => 'git://github.com/rails/journey.git'
gem 'arel',      :git => 'git://github.com/rails/arel.git'
gem 'sqlite3'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sprockets-rails', github: 'rails/sprockets-rails'
  gem 'sass-rails',   '~> 4.0.0.beta', github: 'rails/sass-rails'
  gem 'coffee-rails', '~> 4.0.0.beta', github: 'rails/coffee-rails'

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

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

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

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

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

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

# Deploy with Capistrano
# gem 'capistrano', group: :development

# To use debugger
# gem 'debugger'



gemをインストール
bundle install

Railsサーバーを実行
rails s


いろいろ調べてたら3時間くらいかかった…

2012.12.23 追記
後でもう一回やったら、myapp作成前にthread_safeのインストールが必要だった。
なんでや・・・
gem install thread_safe

2012年11月11日日曜日

久方ぶりのHeroku

久しぶりにHerokuにデプロイしたら「このバージョンのRailsは揺るさねえ」「このバージョンのSQLiteは揺るさねえ」「このバージョンの(ry とか言われてうまくデプロイできなかった。
結局新しくRubyとRailsを入れてやっとデプロイできた。しかしこういう時rvmあるとホント楽だな…
なんかGemfileに以下の記述も必要だった。

source :gemcutter
gem 'rails'

group :development, :test do
  gem 'sqlite3-ruby', :require => 'sqlite3'
end

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を指定してやると解決する。



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