前提・実現したいこと
ASP.NET Core で作成したWebアプリケーションをLinuxサーバ上で動作させたいです。
下記チュートリアルに基づき、サンプルWebアプリケーションを作成しました。
チュートリアル: ASP.NET Core で Razor ページ Web アプリを作成する
Windows上(ローカル環境)では問題なく、動作しましたが、
それをLinux(Raspberry Pi)で動作させたところ、途中でクラッシュしてしまいます。
解決方法を教えていただけますでしょうか。
発生している問題・エラーメッセージ
チュートリアルに基づき、開発したWindowsのローカル環境下では問題なく動作します。
それをLinuxへコピーして、Linuxのローカル環境下で実行したところ、Topページ(localhost:5000)では問題ないのですが、データベースアクセスをするページに移動すると、エラーメッセージが出てしまいます。
Errorページ(localhost:5000/Movies)
Errorメッセージの抜粋
An unhandled exception occurred while processing the request. PlatformNotSupportedException: LocalDB is not supported on this platform. Microsoft.Data.SqlClient.SNI.LocalDB.GetLocalDBConnectionString(string localDbInstance) PlatformNotSupportedException: LocalDB is not supported on this platform. Microsoft.Data.SqlClient.SNI.LocalDB.GetLocalDBConnectionString(string localDbInstance) ~~ RazorPagesMovie.IndexModel.OnGetAsync() in G:~~\RazorPagesMovie\Pages\Movies\Index.cshtml.cs ~~
エラーメッセージに書いてあるIndex.cshtml.cs
が以下です。
c#
1namespace RazorPagesMovie 2{ 3 public class IndexModel : PageModel 4 { 5 private readonly RazorPagesMovie.Data.RazorPagesMovieContext _context; 6 7 public IndexModel(RazorPagesMovie.Data.RazorPagesMovieContext context) 8 { 9 _context = context; 10 } 11 12 public IList<Movie> Movie { get; set; } 13 14 [BindProperty(SupportsGet = true)] 15 public string SearchString { get; set; } 16 17 public SelectList Genres { get; set; } 18 19 [BindProperty(SupportsGet = true)] 20 public string MovieGenre { get; set; } 21 22 public async Task OnGetAsync() 23 { 24 IQueryable<string> genreQuery = from m in _context.Movie 25 orderby m.Genre 26 select m.Genre; 27 28 var movies = from m in _context.Movie 29 select m; 30 31 if (!string.IsNullOrEmpty(SearchString)) 32 { 33 movies = movies 34 .Where(s => s.Title.Contains(SearchString)); 35 } 36 37 if (!string.IsNullOrEmpty(MovieGenre)) 38 { 39 movies = movies 40 .Where(x => x.Genre == MovieGenre); 41 } 42 43 Genres = new SelectList(await genreQuery.Distinct().ToListAsync()); 44 Movie = await movies.ToListAsync(); 45 } 46 } 47}
また、そもそもアプリケーションの起動時にデータベースにSeedDataを生成しているのですが、それが原因だと思われるエラーメッセージもターミナルには表示されています。
そもそもLinuxにSQLServerがインストールされていない(できない?)ので、それが原因かもしれません。
nginxがその代わりになるのかと思っていたのですが、違うのでしょうか?
試したこと
Nginx 搭載の Linux で ASP.NET Core をホストする
上記ページに基づいて、以下のことをしました。
-
UseForwardedHeaders
の追加 -
VisualStudioでの発行(FolderProfile)
-
発行したアプリケーションディレクトリをLinux内の
/var/www/
以下にコピー -
Linuxへのnginxのインストール、起動
-
LinuxへのASP.NET Coreのインストール
-
Linux上での発行したアプリケーションを起動するサービス構成ファイルの作成
-
エラーメッセージを詳しくするため、サービス構成ファイル内の
ASPNETCORE_ENVIRONMENT=Production
をASPNETCORE_ENVIRONMENT=Development
に変更
補足情報(FW/ツールのバージョンなど)
開発環境
Windows 10 1903
Visual Studio 2019 ver. 16.4.0
.NET Core 3.1
実行環境
Raspberry Pi 3 Model B V1.2
Raspbian GNU/Linux 10 \n \l
Microsoft.AspNetCore.App 3.1.0 [/home/pi/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.1.0 [/home/pi/dotnet/shared/Microsoft.NETCore.App]
筆者のレベル
C#を用いたデスクトップアプリケーションの開発経験(WPF)はあります。
C#言語自体はおおよそ理解しているつもりです。
WebアプリケーションはC#も含めて、始めてです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/25 09:58
退会済みユーザー
2019/12/25 11:29
2019/12/26 01:01