2012-01-17 42 views
1

我尝试在VDS上启动真正简单的Ruby on Rails应用程序。我使用Nginx,Phusion Passenger和Sqlite3。我有root权限。Rails 3.1:Sqlite异常

创建项目的代码:

$ rails new myapplication 
$ cd /rails_apps/myapplication 
$ bundle install 
$ rails generate scaffold Post name:string title:string content:text 
$ RAILS_ENV=production rake db:migrate 

我可以访问主页,它显示正常。但是当我尝试插入数据到数据库,我得到下一个:

SQLite3::ReadOnlyException: attempt to write a readonly database: INSERT INTO "posts" ("content", "created_at", "name", "title", "updated_at") VALUES (?, ?, ?, ?, ?) 

我该如何解决呢?

UPD:

chmod 777 \db 

帮助了我。

+0

停止'春天'固定它给我。 – 2015-05-27 07:11:09

回答

4

听起来仍然像是一个特权问题给我。确保您正在运行rails的用户具有编辑文件的权限。例如,如果您在phusion下运行rails,我认为rails有效用户和组是nginx运行的用户和组。测试它是否是权限。我会从你的sqlite数据库文件chmod 777开始,看看是否有帮助。如果是这样,请跟进以查看您是否可以更合理地设置权限,并将db文件的所有权设置给您的nginx用户。

0

的Rails 2.3.5 我也有,当我试图插入一条记录,然后我得到了同样的错误了同样的问题:

的问题是,当我创建了一个项目的DB/schema.rb有所有者是根。 我使用当前用户登录[不是root]。 更改ubuntu文件的所有者后。

检查文件的货主至上然后更改所有者

CHOWN userName的文件名

9

改变所有者的DB文件&权利,我不得不重新启动服务器导轨,使事情后做事。

+1

重新启动导轨控制台和服务器为我解决它。 – iajnr 2015-01-26 18:47:41

0

我知道这是一个老问题,但对于其他人发现它,因为我做了搜索时,我建议在看本雅明的回答这个问题:

How should I set up permission for Rails app?

具体如上述关于答案是,他的第一行:“你绝对不应该使用0777作为你的文件权限,这更容易让你暴露于漏洞之中。”

我知道马特只是提出这是一个调试步骤,他并不是建议在生产中这样做,但OP似乎已经采取了这种方式。

0

从我的应用程序中删除了印象派宝石后,我在Rails 4.1中收到了同样的错误。

我最终什么事做来解决这个问题:

  1. 删除与生成一个新的表印象派
  2. 改变架构中的DB /迁移。rb文件手动删除对印象派的引用
  3. 重新启动服务器
  4. 乘客内存统计信息验证应用程序已重新启动,并且Apache已拿起rackapp pid。

之后,一切正常,但试图找出原因是一个巨大的痛苦。

我推荐你做的一件事是检查你的users并确保没有重复。

3

如果您以管理员身份以外的任何人登录,则可以使用rvmsudo rake db:migrate,这会提示您输入管理员密码并允许您尝试迁移的访问权限。