rda*_*sxy 10 sql sqlite ruby-on-rails amazon-ec2 ruby-on-rails-3
我正在尝试delayed_job使用Sqlite3来安排任务,看起来apache无法读取我的production.sqlite3文件.
这是我的database.yml:
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 5
timeout: 5000
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误(在log/production.log中):
ActiveRecord::StatementInvalid (SQLite3::CantOpenException: unable to open database file:)
Run Code Online (Sandbox Code Playgroud)
我已经运行RAILS_ENV=production rake db:create和RAILS_ENV=production rake db:migrate.该db/production.sqlite3文件存在,db目录及其所有子文件夹归所有者所有apache:apache,apache运行为.我在Amazon EC2上使用Phusion Passenger.
SQLLite的工作原理是让Rails进程写入Rails目录树中的系统文件.Rails进程由Apache拥有,它默认设置用户"apache"和组"apache".要使其工作,您需要为/db目录上的apache用户或组授予写入权限.
要么
配置apache以使用已具有write该目录权限的组运行.一个好的策略是创建一组可能需要访问各个位置的各种进程 - 例如,我有一个"deployer"组,用户执行发布将与apache实例一起成为其中的一部分.我通常发现,拥有各个进程和登录用户所属的组可以使生活更轻松(例如查看服务器日志),编写上载或缓存文件等.
AND/OR
使用像PostgreSQL或MySQL这样的真实数据库服务器 - 它们可以工作,因为它们是管理自己文件的自己的进程.Rails进程(在您的情况下为apache)连接到Unix端口上的数据库服务器进程.每个服务器进程只安全地管理它知道的文件.
SQLLite很适合入门 - 超级简单且开销低,但很快您就需要在生产中运行常规数据库服务器.然后你很快就会发现SQLLite和其他东西之间的情况并不完全相同,此时你应该在dev机器上安装相同的数据库服务器.
| 归档时间: |
|
| 查看次数: |
10679 次 |
| 最近记录: |