我正在尝试使用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
使用像Postgresql或MysqL这样的真实数据库服务器 – 它们可以工作,因为它们是管理自己文件的自己的进程. Rails进程(在您的情况下为apache)连接到Unix端口上的数据库服务器进程.每个服务器进程只安全地管理它知道的文件.
sqlLite很适合入门 – 超级简单且开销低,但很快您就需要在生产中运行常规数据库服务器.然后你很快就会发现sqlLite和其他东西之间的情况并不完全相同,此时你应该在dev机器上安装相同的数据库服务器.