質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2216閲覧

【Unity】SQLiteをLinuxレンタルサーバ上で動作させたい

Yosuke8739

総合スコア5

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/04/25 16:30

編集2021/05/01 09:28

【やりたい事】
SQLiteUnityKitによるdb処理を、Linuxのレンタルサーバ(スターサーバ)上で動作させたい

【現状と問題点】
・Unity Editor上では問題なく動作する。
・WebGLでビルド後、Linuxサーバ上にデプロイし、SQLiteの処理を動作させると動作しない。(動作的にはフリーズする。暫くすると"ページが応答していません"とのダイアログが表示される)

【環境】
・Unity 2020.2.1f1 Personal
・レンタルサーバ(スターサーバ)のOS→Linux
・SQLiteUnityKit(https://github.com/Busta117/SQLiteUnityKitから取得)
・libsqlite3.soファイル(https://github.com/Busta117/SQLiteUnityKitから取得)
・.dbファイルの置き場所→Assetsフォルダ直下(デプロイ後はルートディレクトリ)
▲libsqlite3.soファイルの置き場所→不明。知りたい箇所です。現状は/Plugins/GitHub/Editorにとりあえず置いて弄っていました。Editor用のwindowsファイル(libsqliteX.dll)は/Plugins/x86_64内。
・デプロイ後の.dbファイルのPermission→テストのため777に設定、FFFTP上で確認。
・WebGLでビルド後、Linuxレンタルサーバへデプロイし、Windowsのブラウザでアクセスしています。(追記)

コード

// 書き込み public bool AddPlayersDb() { var nameFieldRegister = GameObject.Find("InputField_RegisterName").GetComponent<InputField>(); var path = Application.dataPath; var fileName = "players.db"; var db = new SqliteDatabase(path + "/" + fileName); var query = db.ExecuteQuery("SELECT * FROM players"); var loginName = nameFieldRegister.text; foreach (var row in query.Rows) { if (loginName == row["name"].ToString()) { if (loginName != "Nameless") { return false; } } } Guid gu = Guid.NewGuid(); // GUID string guid = gu.ToString(); var len = guid.Length; var name = nameFieldRegister.text; var id = guid.Substring(len - 12); db.ExecuteQuery($"INSERT INTO players (name, id) " + $"VALUES ('{name}', '{id}')"); return true; } // 読み込み public bool LoadPlayersDb() { var path = Application.dataPath; var fileName = "players.db"; var db = new SqliteDatabase(path + "/" + fileName); var query = db.ExecuteQuery("SELECT * FROM players"); nameField = GameObject.Find("InputField_LoginName").GetComponent<InputField>(); idField = GameObject.Find("InputField_LoginID").GetComponent<InputField>(); var loginName = nameField.text; var loginId = idField.text; foreach (var row in query.Rows) { if (loginName == row["name"].ToString() && loginId == row["id"].ToString()) { gm = GameObject.Find("GameManager").GetComponent<GameManager>(); gm.playerName = row["name"].ToString(); gm.playerId = row["id"].ToString(); return true; } } return false; }

まず、libsqlite3.soファイルの置き場所が分かりません。
Androidやwindowsは検索すれば見つかったのですが、プラットフォームがLinuxの場合のプラグインファイルの置き場所については見つける事ができませんでした。

公式マニュアルの
https://docs.unity3d.com/ja/2020.3/Manual/PluginInspector.html
も確認すると、一番下に各プラットフォームの場合における.dllや.so等のプラグインファイルの置き場所について記載があり、WindowsやAndroid、iOSは確認できるのですが、Linuxの場合は記載ないようで、分かりませんでした。

また、それ以外にもデプロイ後にフリーズする問題につきまして、分かることがありましたら、ご教授いただきたく思います。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Linuxも種類はStandaloneなのでlibsqlite3.soをPluginsフォルダに入れてImport Settingsの

Select platforms for plugin

  • All platformのチェックを外す
  • Include PlatformsのLinuxのみをチェックする
  • Include PlatformsのStandaloneのみをチェックする

Platform setting

  • CPUからサーバーと同じものを選ぶ
  • OSからLinuxを選択する
  • 最後にApplyボタンを押す

以上を設定するとライブラリが読み込まれます。

投稿2021/04/27 17:27

編集2021/05/01 08:33
shiena

総合スコア1827

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yosuke8739

2021/05/01 08:22

ありがとうございます。 Select platforms for pluginのInclude PlatformsにLinuxがない(Editor,Standalone,WebGLのみ)など、一部私が使っているlibsqlite3.soの設定内容と違いがありましたが(バージョンによる違いだと思いますが)、一応それと思われる項目にチェックを入れたり選択しましたが、やはりサーバ上では動きませんでした。 Plugins直下に入れ、.soファイルの設定も仰る通り(に近いもの)に設定してもフリーズするので 別の要因や複数要因かもしれないので、調べたところリモートデバッグというものがあるようなので このあたりを使ってコードを追って、どこでフリーズしているのか切り分けからやった方がいいかと思っています。
shiena

2021/05/01 08:44

すみません、Select platforms for pluginを間違えていたので修正しました。ここはStandaloneです。 またSQLiteUnityKit内のDllImportのEntryPointは"sqlite3"でしょうか? LinuxではEntryPointの前に"lib"、後ろに".so"を足したファイルをライブラリとして読み込むルールがあるので異なると動きません。(Windowsだと後ろに".dll"を足したファイルです) それでも解決しないならPlayer.logも糸口になるかもしれません。 https://docs.unity3d.com/ja/2020.2/Manual/LogFiles.html
Yosuke8739

2021/05/01 09:17

ありがとうございます、取り急ぎご返信させていただきます。 ファイル名は「libsqlite3.so」で、Plugins直下に配置しております。 また、SQLiteUnityKitの中に入っていた「DataTable.cs」および「SqliteDatabase.cs」はPlugins/SQLite/内に配置しております(Scriptsフォルダ内でも動作したのでこの2つの.csファイルは特に配置に決まりはないようです)。 SQLiteUnityKit内の全てのファイルは、リネームや内容の変更は一切せず、直にImportした形となります。 また、Select platforms for pluginはStandaloneのみチェックするのも試したはずですが、もう一度確認してみます。 WebGLを使っているので、基本的にWebGLのみにチェックをつけて確認していたので、確認漏れの可能性があるので一応確認致します。
Yosuke8739

2021/05/01 09:19

大変申し訳ありません、上記を書いて気づきましたが、WebGLでビルドしている旨の情報を記事中に記載していないことに気づきました。 WebGLで作った(ビルドした)ファイルを、レンタルサーバ(OS:Linux)にデプロイし、Windowsのブラウザでアクセスする、という形になります。 失礼致しました。
shiena

2021/05/01 17:53

なるほど、それは重要な情報です。SQLiteUnityKitは配布サイトに書かれているようにiOS / Android / MAC / Windowsしか動きません。なので選択肢は - SQLite以外を使う。代わりにNoSQLのiBoxDBを使う例がありました。 - C#のみで作られたSQLiteライブラリを使う。ライブラリ次第ですがSQLiteUnityKitよりは使いやすくなさそうです。
Yosuke8739

2021/05/02 04:46

大変申し訳ありませんでした。 そもそもサポート外だったのですね…。 動作環境という基本的な項をちゃんと確認していませんでした。 何度もご回答頂き、ありがとうございました。
guest

0

公式マニュアルの

https://docs.unity3d.com/ja/2020.3/Manual/PluginInspector.html
も確認すると、一番下に各プラットフォームの場合における.dllや.so等のプラグインファイルの置き場所について記載があり、WindowsやAndroid、iOSは確認できるのですが、Linuxの場合は記載ないようで、分かりませんでした。

Windows、OS X(macOS)、Linuxは、同じ置き場所になるように読めました。
基本的には CPUによって分け、
iOS、Android などの OS だけ別のディレクトリが用意されているのではないでしょうか。

(※Unity は門外漢なので見当違いかもしれません)

投稿2021/04/26 09:49

satokei

総合スコア1217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yosuke8739

2021/05/01 08:10

ありがとうございます。 サーバ側のCPUが分からなかったので、全てのCPUフォルダに次々入れて試してみましたがどうも上手くいきませんでした。 そもそも問題点が違う可能性があるので、もう少しデバッグで調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問