Rails:SQLite3 :: CantOpenException:无法打开数据库文件

前端之家收集整理的这篇文章主要介绍了Rails:SQLite3 :: CantOpenException:无法打开数据库文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用delayed_job来使用sqlite3来安排任务,看起来apache无法读取我的production.sqlite3文件.

这是我的database.yml:

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

这是我得到的错误(在log / production.log中):

ActiveRecord::StatementInvalid (sqlite3::CantOpenException: unable to open database file:)

我已经运行了RAILS_ENV =生产rake db:create和RAILS_ENV =生产rake db:migrate. db / production.sqlite3文件存在,db目录及其所有子文件夹归apache所有:apache,apache运行为.我在Amazon EC2上使用Phusion Passenger.

sqlLite的工作原理是让Rails进程写入Rails目录树中的系统文件. Rails进程由Apache拥有,它默认设置用户“apache”和组“apache”.要使其工作,您需要为/ db目录上的apache用户或组授予写入权限.

要么

将apache配置为与已具有该目录的写权限的组一起运行.一个好的策略是创建一组可能需要访问各个位置的各种进程 – 例如,我有一个“deployer”组,用户执行发布将与apache实例一起成为其中的一部分.我通常发现,拥有各个进程和登录用户所属的组可以使生活更轻松(例如查看服务器日志),编写上载或缓存文件等.

AND / OR

使用像PostgresqlMysqL这样的真实数据库服务器 – 它们可以工作,因为它们是管理自己文件的自己的进程. Rails进程(在您的情况下为apache)连接到Unix端口上的数据库服务器进程.每个服务器进程只安全地管理它知道的文件.

sqlLite很适合入门 – 超级简单且开销低,但很快您就需要在生产中运行常规数据库服务器.然后你很快就会发现sqlLite和其他东西之间的情况并不完全相同,此时你应该在dev机器上安装相同的数据库服务器.

猜你在找的Sqlite相关文章