rails 3中的权限错误

时间:2011-09-07 14:14:23

标签: ruby-on-rails ruby permissions

我的rails3应用程序使用madeleine(http://madeleine.rubyforge.org/)来存储对象。

m = SnapshotMadeleine.new("data_dir") {
    Array.new
}

此代码在我的本地计算机上运行正常,但在服务器上引发错误。

Permission denied - data_dir

跟踪是,

/home/foo/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:243:in `mkdir'
/home/foo/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:243:in `fu_mkdir'
/home/foo/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:217:in `block (2 levels) in mkdir_p'
/home/foo/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:215:in `reverse_each'
/home/foo/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:215:in `block in mkdir_p'
/home/foo/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:201:in `each'
/home/foo/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:201:in `mkdir_p'
madeleine (0.7.3) lib/madeleine.rb:319:in `ensure_directory_exists'
madeleine (0.7.3) lib/madeleine.rb:314:in `initialize'
madeleine (0.7.3) lib/madeleine.rb:48:in `new'
madeleine (0.7.3) lib/madeleine.rb:48:in `new'

如果data_dir目录已存在,则会发生此错误。我更改了data_dir目录和根目录777的权限,但错误仍然发生。

我使用rails 3.0和ruby 1.9.2-p290和rvm,我用

启动服务器
rails s -d -e production

我写了一个简单的测试代码,它没有任何错误。

require 'rubygems'
require 'madeleine'

madeleine = SnapshotMadeleine.new("data_dir") do
  Array.new
end
madeleine.take_snapshot

导致此问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

我猜测SnapshotMadeleine.new试图创建一个目录,因为错误提到了FileUtils.mkdir。

您应该让rails用户有权写入Web应用程序的根目录(?),以便它可以创建文件夹,而不是只写入已存在的文件夹。 或者修改SnapshotMadeleine的源,以便它不存在已创建的目录。