Grow up

生活とプログラミング

VisualStudio2017 C# .NET Core で Heroku Postgres を使う

はじめに

Heroku Postgresを使ったアプリをデプロイしたので大まかな手順をまとめます。

開発環境

・Windows10 Pro
・VisualStudio2017
Visual Studio のインストール | Microsoft Docs

Postgre SQLをインストールする

Heroku Postgresにテーブルを作成する際にPostgre SQLのコマンドを使用するためインストールします。

以下の記事を参考に行いました。
rowingfan.hatenablog.jp

開発PCからHeroku Postgresを使う場合はSSL接続が必要になるため、SSL接続が出来ない場合はローカルのPostgreSQLを使用して開発します。

Npgsqlを使う

Postgre SQL に接続して操作するには Npgsql を使います。

Install-Package Npgsql

バージョンを指定する場合は以下のサイトを参照してください。
https://www.nuget.org/packages/Npgsql/

注意点
using Npgsql を使用すると次の手順でビルドエラーになります。
そのため、Npgsqlのネームスペースを常に指定するようにします。
f:id:knkomko:20190317173738p:plain:w450

Heroku リポジトリの作成

ログイン後のページから Create new app を左クリックします。
f:id:knkomko:20190317182243p:plain:w350

App name に入力して Create app を左クリックします。
f:id:knkomko:20190317182300p:plain:w350

Heroku Postgres データベースの作成

Heroku リポジトリのResourceからHeroku Postgresを追加します。
f:id:knkomko:20190317182336p:plain:w350

Hobby Dev - Free を選択して Provision を左クリックします。
f:id:knkomko:20190317182445p:plain:w350

Heroku Postgres テーブルの作成

コマンドが使える事を確認します。
f:id:knkomko:20190317182848p:plain:w350

Heroku Postgres に接続します。

heroku pg:psql -a [Herokuリポジトリ名]

f:id:knkomko:20190317184644p:plain:w350

create table にてテーブルの作成を行います。

Ctrl + C で終了することができます。

.Net Core アプリのデプロイ

以下の記事を参考に行いました。
kagasu.hatenablog.com

注意点
① using Npgsql
using Npgsql を使ったまま下記のコマンドを実行するとエラーになります。

dotnet publish -c Release -r linux-x64

以下のようなエラーになる場合は using Npgsql を消してから再度実行します。
詳細は「Npgsqlを使う」の手順を参照してください。

ファイル名.cs(行数): error CS0246: 型または名前空間の名前 'Npgsql' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。 [ファイルパス.csproj]

② Docker
Dockerが起動しない状態で下記コマンドを実行するとエラーになります。

heroku container:push web -a [Herokuリポジトリ名]
heroku container:release web -a [Herokuリポジトリ名]

以下のようなエラーになる場合は、Dockerを起動してから再度実行します。

ERRO[0004] failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: open //./pipe/docker_engine: The system cannot find the file specified.
ERRO[0004] Can't add file \\?\(プロジェクトのファイルパス) to tar: io: read/write on closed pipe
~~略~~
The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.
 !    Error: docker build exited with Error: 1


.Net Core で Postgre SQL を使う内容については以上で終了です。

Herokuのデプロイ後の実行ログを見る

デバッグ時に使ったので記載しておきます。

heroku logs -a [Herokuリポジトリ名]