4

我正在尝试打包一个 rails (3.2) 应用程序以在 Windows 机器上运行,并且我正在使用 OCRA 将应用程序“编译”成一个 exe。在反复用头敲桌子后,我设法让应用程序编译并运行,但我还有一个问题;应用程序的数据库也打包在 .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:为 justproduction.sqlite然后../production.sqlite将数据库文件放在与编译的 exe 相同的文件夹中,然后再运行它,但这没有奏效。
我对设置不同的数据库非常不熟悉,所以我确定我在这里遗漏了一些关键点!

4

1 回答 1

5

我终于在关于另一个 ORCA 相关问题的google-groups 讨论中找到了答案,它恰好包含了我需要的 database.yml 配置。

要让 OCRA 编译的 exe 外部的数据库,使数据库文件与 .exe 位于同一目录中,请将database:database.yml 中的参数设置为此;

<%= 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 在数据库中创建一个新条目,然后终止 app.exe。当我再次运行 app.exe 时,对数据的更改仍然存在。

于 2013-08-24T15:04:47.543 回答