読者です 読者をやめる 読者になる 読者になる

既存の git リポジトリをHeroku にデプロイするまでのメモ

最近は趣味で Heroku を触っています。
Heroku は作成したアプリのデプロイに git を使ったりするのですが、普段は仕事で使っていないこともあり、コマンドをすっかりと忘れていました。笑
再確認しメモを残しましたので、せっかくなのでブログにあげます。

空のリポジトリを作成する

git init

既存の git リポジトリのコピーを持ってくる

git clone (リポジトリ).git

ローカルリポジトリにファイルを追加する

git add -A

引数に -A をつけると、「すべてのファイルを追加」という意味になります。追加したくないファイルは .gitignore にあらかじめ書いておく。

ローカルリポジトリの状態を確認する

git status

ファイルの追加、修正などの状況が一覧で表示されます。

ローカルリポジトリに変更をコミットする

git commit -m "first commit"

引数の -m は message のことで、コメントを付与します。
省略するとエディタが起動し、コメントの入力が求められるのでめんどくさい。

Heroku アプリを作成する

heorku create (アプリ名)

Heroku への URL やデプロイ先のアドレスを教えてくれる。

git のリモートリポジトリの登録

heroku git:remote -a (アプリ名)

「heroku」の名前で、デプロイ先のアドレスがリモートリポジトリとして登録されます。

git のリモートリポジトリの確認

git remote -v

リモートリポジトリへのプッシュ

git push heroku master

master ブランチを、heroku という名前のリモートリポジトリにプッシュする。

ブラウザで開く

git open

ブラウザが立ち上がり、Heroku の URL を参照する。

GitHub Shop でお買い物をしてみた

本日は技術的な話ではまったくないです。
GitHub の公式オンラインショップでお買い物をしてみたので感想を書いてみます。購入の仕方などは、ググればたくさん出てくるので今回は省略します。
github.myshopify.com

購入したのものはこちらでございます。オクトキャットさんのTシャツ。

f:id:kusane3:20170306232513j:plain

海外からの発送だったのですが、注文してから5日ほどで到着しました。早い!
そして送料は7$くらい。なので700円ちょいかな?Tシャツのみの注文だったので送料はお安くなってますが、かさばるものとか複数商品を注文したりすると、送料が一気に跳ね上がるようになってるみたいです。注意ですね。

今回はアメリカサイズということもあって、Mサイズを購入してみました。が、身長180cmちょいある自分でもちょっと丈が長いかな?といった感じ。その他はジャストサイズでございました。

そしてなんと、届いたTシャツのタグの部分を見てみると、、、American Apparelの文字が…!
GitHub さんはアメアパに発注して作ってもらってたんですかねー。最近、アメアパは日本から撤退してしまったというニュースもありましたが、、、
購入を検討されていて、サイズ感が気になる方は参考にしてみてください。

IIS と log4net の組み合わせでログローテが行われない

ブログを始めて3日目で更新が途絶えており、リアルに3日坊主になっておりました…。
今回は log4net で不思議な現象に遭遇したので、その現象と解決策について書いていきます。

環境
log4net の設定値
<appendToFile value="true" />
<rollingStyle value="date" />
<staticLogFileName value="true" />

ログ監視のソフトを使う都合上、ログファイル名は固定しており、ログローテの方式は日付にしておりました。

現象
  • 日付でのログローテが行われない
  • 日付をまたいでも、同一のファイルにログが追記されてしまう
原因

結論から書くと、IIS のアプリケーションプールのリサイクルが原因でした。
IIS のリサイクルのタイミングは、夜中の1時に設定しており、なぜかそのタイミングで、ログファイルの更新日付のみが更新されるという
現象が起きることが確認できました。
つまり、

  1. 20xx年yy月01日 ログ出力 -> ap.log
  2. 20xx年yy月02日 リサイクル -> ap.log の更新日付を更新(IIS からの処理なのでログローテしない)
  3. 20xx年yy月02日 ログ出力 -> ap.log に追記(更新日付は 02日で同日なのでログローテしない)

という流れの処理になっていたのだと思われます。

解決策

おそらく、log4net のプロセスがログファイルを常に掴んでおり、解放するタイミングでログファイルの更新日付を更新しているのかと予想し、log4net のコンフィグに以下の設定値を追記しました。

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

これにより、ログファイルに追記する時のみ log4net のプロセスがファイルを掴むようになるため、無事にログローテが行えることが確認できました。
 

[ASP.NET] JavaScript のクエリ文字列にファイルの更新日付を挿入する

よくわからないタイトルになってしまいましたが...
JavaScript ってブラウザにキャッシュされるので、普通に読み込ませていると
JavaScript を更新しても更新内容が反映されない。

なのでその対策として、クライアントのブラウザにてキャッシュを削除することもあるのですが、実際のお仕事とかだとクライアント側で何かやってもらうのって結構ハードルが高い...
そのため、以下のように JavaScript を呼び出す際に適当なパラメータとクエリ文字列を付加するってのがよくあります。
いわゆる Cache Busting ってやつです。

<script type="text/javascript" src="../Scripts/test.js?date=yyyymmdd"></script>

ところが、上記のような書き方だと、JavaScript ファイルを更新した際に
クエリ文字列も併せて変更しなければなりません。
忘れたりすると大変ですよね。

というわけで、JavaScript のファイルの更新日時を読み込んで、
クエリ文字列に付加するコードを vb で書いてみました。
前置きが長くなりましたが、以下のようなコードです。

JavaScript を読み込ませている部分

<script type="text/javascript" src="../Scripts/test.js?date=<%# System.IO.Directory.GetLastWriteTime(Request.PhysicalApplicationPath & "/Scripts/test.js").ToString("yyyyMMddHHmmss") %>"></script>

<% %>で囲まれている部分は埋め込みコードブロックと呼ばれる部分で、
#をつけることによりデータバインディング構文となります。

データバインディングにより、ファイルの更新日時をバインドするため、Head タグをサーバ化

<head id="headId" runat="server">


コードビハインドの Page_Load に以下を追加して完成

headId.DataBind()

SELECT CASE 文で ORA-00923 のエラーが出る場合

Oracle 12c にて、以下の SQL で ORA-00923 (FROMキーワードが指定の位置にありません) のエラー。

SELECT
  CASE test_col
    WHEN '0' THEN 'ゼロ'
    ELSE 'ゼロでない'
  END AS '判定カラム'
FROM
  t_test

さて、何が悪いでしょう?

答えは、SELECT CASE の列名部分を以下のように修正すれば OK。

  END AS "判定カラム"

文字定数は「'」(シングルクォート)
日本語列名は「"」(ダブルクォート)
らしいのです。Oracle ってむずかしいね。

こんにちは、はてぶろ

ブログ、はじめてみました。
これからはお仕事で使ったプログラミングのメモとかを備忘録として残していこうと思います。

まずは、とりあえずのテスト投稿でございます。
ソースコードを書いたら色がつくやつがやってみたかったのです。

#include <stdio.h>

int main()
{
    printf("Hello, world!\n");
    return 0;
}