楽しい人生

紙 おいしいな〜!

ASP.NET Core MVC における DB の自動 Migration 実行

tl;dr

Startup.csConfigure メソッド内で IdentityDbContext 継承クラスインスタンス contextcontext.Database.Migrate() メソッドを呼ぶ

背景・動機

ASP.NET Core MVC アプリケーションにおいて、起動時に自動で Migration を実行して欲しい

方法

前提として、Entity Framework Core のを利用しているものとします。

まずは Migration を実行するためのクラスを Data/MigrationInitializer.cs に作成します。

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace AppName.Data
{
    public class MigrationInitializer
    {
        public static async void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new ApplicationDbContext(
                serviceProvider.GetRequiredService<DbContextOptions<ApplicationDbContext>>()))
            {
                await context.Database.MigrateAsync();
            }
        }
    }
}

次に、Startup.cs 内の Configure メソッドの最後に以下のコードを追記します。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // 中略
    MigrationInitializer.Initialize(app.ApplicationServices);
}

これで、アプリケーション起動時に Migration が自動で実行される様になります。

Windows の ruby にて gem install に失敗する場合は gem コマンドを手動アップデートすると良い

Windows における Ruby で、gem コマンドにより rubygem をインストールしようとすると以下のような SSL 接続エラーが出る場合があります。

PS C:\> gem install bundler
ERROR:  Could not find a valid gem 'bundler' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)

この問題は gem コマンド自体のバージョンが古いために起こるので、gem コマンドを最新のものに変更すれば良いです。

手順

  1. 最新の rubygems-update gem を手動ダウンロードする(ここではバージョン 2.6.8 と仮定)
  2. gem install rubygems-update-2.6.8.gem を実行し、rubygems-update gem をインストール
  3. update_rubygems --no-ri --no-rdoc を実行し、gem コマンドをアップデートする
  4. gem uninstall rubygems-update -x を実行し、rubygems-update gem をアンインストール

以上です。gem -v すると 2.6.8 になっており、任意の gem のインストールに失敗する問題が解決しているはずです。

Slack はもう古い、これからは次世代チャットの「あび屋」

tl;dr

f:id:supermomonga:20161028211518p:plain

経緯

仕事の都合で古の perl cgi をコード変更なしにサーバ移行する必要が出てきたので、これは Docker ですねということで Apache コンテナで mod_cgi を動かす練習をすることになりました。

次世代のチャット「あび屋」を設置

最近、perlcgi ベースの「あび屋」が Yet Another Slack として世界的に注目を集めていることはご存知だと思います。今回の練習にぴったりだということで、今回はこちらを Docker コンテナとして自宅サーバーに設置してみました。

「あび屋」とは

「あび屋」は、Slack には存在しないユニークな機能を備えています。

  • アバターベースの空間表示による、まるでその場で対面しているかのような密度の濃いコミュニケーション
  • 発言すればするほど「チャット内通貨」が貯まっていき、その通貨を消費することで様々な疑似コミュニケーションを行うことができる
  • 安い(800円弱のライセンス購入でずっと使える)

これはもう御社も Slack から移行してイントラで設置するしかないですね。

実際のチャットには https://izakaya.darui.io/ こちらからアクセスできます。居酒屋モードを使うために有料ライセンスも購入しました。技術調査の一環での購入なので、経費扱いになりました。

みなさんもぜひお使い下さい。では。

Emacs の tramp にてリモートのファイルを開く時 sudo を使う

パイプを使えばできました

/ssh:user@host|sudo::/etc/nginx/nginx.conf

便利