はじめに
自宅のWindowsマシンにIISとSQLServer2014ExpressをインストールしてASP.NETのアプリを稼働させていただものの、
そのマシンが再三の電源断(エアコン&電子レンジ&トースターコンボによるブレーカー落ち)に見舞われ、システムのロールバックが発生。
結果、データは残ったものの環境が綺麗さっぱりなくなりました。
ということで、さくらのクラウドクーポンもあるし、クラウドへ移行することに決め、
.NET Core, ASP.NET Core をやってみようとまずはチュートリアルをやってみてそれを記録していきます。
途中まで順調だったものの、開発環境(Windows)から実行環境に(CentOS)に乗せて実行した時にトライ&エラーがありました。
環境等
開発環境
-
Windows 10 Home 64Bit
-
Visual Studio Community 2015
-
Git(SourceTree)
実行環境
-
さくらのクラウド(1CPU,1GB,20GB HDD)
-
CentOS 7.2 64Bit
-
.Net Core環境は構築済み
チュートリアル開始
オフィシャルのチュートリアルに沿って進めます。
開発環境のVisual Studio Community 2015
でやります。
-
まずはプロジェクトの作成と起動
Getting started with ASP.NET Core MVC and Visual Studio
-
ASP.NET Core Web Application(.NET Core)
の新規プロジェクト作成 -
そしていきなり
Ctrl+F5
で起動! -
何事もなく表示される
-
-
次。Controller
-
Controllerクラスを追加
-
メソッドを2つ追加。Index,Welcome
-
Indexはデフォルト参照される
-
WelcomeはPath指定したら参照される
-
よくあるやつ
/[Controller]/[ActionName]/[Parameters]
-
-
で、その定義が
Startup.cs
に定義されてますよってことみたい-
template: "{controller=Home}/{action=Index}/{id?}");
で指定 -
ASP.NETと同じです
-
-
Welcome()にパラメータ追加しましょう
-
… チュートリアルの内容を進めているだけなので、特に書くことない …
-
実行環境(CentOS)で動かしてみる
画面が表示される状態になってちょっとだけ修正したので、CentOS上にリリースして動かしてみましょう!
ということでここからは、さくらのクラウドで稼働しているCentOSでやります。
-
実行してみる
-
dotnet restore
問題なし。 -
dotnet run
コケた。$ dotnet run
Project helloAspDotNetWebApp (.NETCoreApp,Version=v1.0) will be compiled because the version or bitness of the CLI changed since the last build
Compiling helloAspDotNetWebApp for .NETCoreApp,Version=v1.0Compilation succeeded.
0 Warning(s)
0 Error(s)Time elapsed 00:00:02.5178875
The specified framework 'Microsoft.NETCore.App', version '1.0.1' was not found.
- Check application dependencies and target a framework version installed at:
/opt/dotnet/shared/Microsoft.NETCore.App - The following versions are installed:
1.1.0 - Alternatively, install the framework version '1.0.1'.
どうやら、
Microsoft.NETCore.App
の開発環境と実行環境バージョンが一致してないらしい。
実行環境は1.1.0
らしいので開発環境をバージョンアップしなければ。 - Check application dependencies and target a framework version installed at:
-
VisualStudioのNuGetパッケージマネージャから更新
-
ほんとだ、現在は
1.0.1
だ… さっき作ったのになんで最新じゃないんだっけ -
とりあえず開発環境のNuGetパッケージマネージャで更新
-
-
更新できたのでLinux側で再チャレンジ
-
dotnet restore
-
dotnet run
…コケた…$ dotnet run
Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'centos.7-x64'. Possible causes:- The project has not been restored or restore failed - run
dotnet restore
- The project does not list one of 'centos.7-x64' in the 'runtimes' section.
- You may be trying to publish a library, which is not supported. Use
dotnet pack
to distribute libraries.
これは… うーん、ターゲットランタイムはcentos.7-x64と互換ないっすよ。と… .NET Core なのに互換ないとかなんてことだ!
とりあえず開発環境ですべてのNuGetパッケージを更新してみる。全部で3回更新してやっと全部更新完了。
で、再チャンレジしたけどダメ…
-
ググってたらこんな情報見つけた。
ランタイムに centos.7-x64 と指定すると発行ができるようになります。
dotnet publish --configuration Release --runtime centos.7-x64
ん~、だめ。
※ 動いたあとでよく見たらちゃんと`project.json`にruntimeブロックが追記されていました。ちゃんと読まなきゃだめですね…
-
さらにこんな情報を見つけた。
In my project.json I added the following section:
project.json
にruntimeセクション追加して、そこでcentos.7-x64
を指定しろ。ってことなんだけど、これは上でやっていることとほとんど同じだからダメだろ… と思ってやってみたら、キタコレ!
これで起動するということはランタイム指定ができていれば良いということ。
つまり、dotnetコマンドのruntimeオプションが効いてない?
-
dotnetコマンドのリファレンス確認
これによると、
--runtime
っていうオプションは記載されてない。でも、コマンド実行した時にエラーにならないの?試しに…
dotnet run -hoge
dotnet run --hoge
hogeパラメータは完全に無視されて普通に動いた…
やっぱり、オプションによるruntime指定はできない。
project.json
のruntimeセクションで指定する必要がある。が正解みたいだ。下記が
project.json
に追記した内容。"runtimes": { "centos.7-x64": { } }
- The project has not been restored or restore failed - run
-
-
今日はここまで!続きはまた今度!