4

Rails (3.2) アプリをパッケージ化して Windows マシンで実行しようとしていますが、OCRA を使用してアプリを exe に「コンパイル」しています。何度も机に頭をぶつけた後、なんとかアプリをコンパイルして実行することができましたが、まだ 1 つの問題が残っています。アプリのデータベースも .exe 内にパッケージ化されているため、アプリが実行され機能している間 (新しいレコードを作成および取得できます) は一時的なものであり、exe が停止するとデータベースへの変更はすべて失われます。

だから私がする必要があるのは、アプリの外部にあるデータベースを持っているので、それはexeの外部になると思います。しかし、私はそれを機能させることができませんでした。database.yml のデータベース パスをいくつかの異なる値に変更しようとしましたが、試したことはありません。外部データベースに接続するために私が見た例はすべて、ローカルファイルではなくリモートホストへの接続を示しています。
私が欲しいのは、データベースファイルがexeと同じフォルダーにあることです。

コンパイルされたアプリはプロダクション モードで実行されます。これは、exe のビルドに使用した ocra コマンドです。

ocra myapp\script\rails myapp --add-all-core --gemfile myapp\Gemfile --no-dep-run --gem-full --chdir-first -- server -e production

database.yml は基本的にアプリ作成後の状態です

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

database:に設定してから、実行する前にコンパイル済みのexeと同じフォルダーにデータベースファイルを配置しようとしましたがproduction.sqlite、うまくいきませんでした。 私はさまざまなデータベースのセットアップに慣れていないので、ここでいくつかの重要なポイントが欠けていると確信しています!../production.sqlite

4

1 に答える 1

5

別の ORCA 関連の質問に関する Google グループのディスカッションで、これに対する答えがついに見つかりました。たまたま、必要な database.yml 構成が含まれていました。

データベース ファイルが .exe と同じディレクトリに存在するように、OCRA コンパイル済み exe の外部にデータベースを配置するには、database.yml のdatabase:パラメータをこれに設定します。

<%= File.expand_path('../production.sqlite3', ENV["OCRA_EXECUTABLE"]) %>

コンパイルしたアプリは運用モードで実行されるため、database.yml のその部分は次のようになります。

production:
  adapter: sqlite3
  database: <%= File.expand_path('../production.sqlite3', ENV["OCRA_EXECUTABLE"]) %>
  pool: 5
  timeout: 5000

これで完全に動作します。app.exe を実行して DB に新しいエントリを作成し、app.exe を終了できます。app.exe を再度実行すると、データへの変更がまだ残っています。

于 2013-08-24T15:04:47.543 に答える