Rails:Rake测试:功能无法访问DB(winXP上的Sqlite3)

时间:2009-08-05 16:55:47

标签: ruby-on-rails windows sqlite rubygems rake

我无法运行rake test:使用SQLite3的函数,它给了我这个错误:

rake aborted!
Permission denied - db/test.sqlite

(See full trace by running task with --trace)

我的设置是在Windows XP上。 几周前测试工作正在进行。 Rails 2.3.2,Rake 0.8.7,sqlite3-ruby 1.2.5 gems

我正在使用Netbeans进行开发,但即使它已经关闭,我也无法从命令提示符运行测试。

我还检查了没有打开test.sqlite的句柄(通过sysinternals任务管理器)。

我检查了权限,没关系。

我试图删除该文件并重新创建它,或者复制到另一个文件名而没有任何运气。

我在计算机启动后立即尝试运行该命令。

感谢任何帮助。

由于

5 个答案:

答案 0 :(得分:3)

我刚遇到这个问题。对我来说,这是因为我在测试环境中打开了我的rails控制台。关闭我的会话,它不再抛出错误。

答案 1 :(得分:2)

非常非常类似的行为:Windows XP,SQLite3,Rails 2.3.4,Rake 0.8.7,Ruby 1.8.6

  

rake test

有效(但我不相信它实际上正在运行单元测试)

  

佣金测试:单位

  

rake test:functionals

都失败并显示“权限被拒绝 - db / test.sqlite3” 启用了--trace后,特定错误发生在../rails-2.3.4/lib/task/databases.rake:370一行,如果是File.exist?(dbfile),则读取“File.delete(dbfile)

所以...长话短说......我评论了它。

这不是一个修复,但这足以让测试对我起作用。

答案 2 :(得分:1)

如果您在Cygwin下运行,请尝试在数据库文件上运行:

chmod 777 <your-files>

Cygwin可能会对应该应用哪些权限感到困惑。

是的我知道这些权限是荒谬的,但Cygwin有时也是......

答案 3 :(得分:0)

只是一个平底船,但您是否尝试将config/database.yml中的路径更改为

database: db\test.sqlite3

即。一个反斜杠而不是一个前锋。甚至是完整的dos风格路径。问题可能与此https://rails.lighthouseapp.com/projects/8994/tickets/4153-dbcreate-cannot-open-database-for-sqlite3-on-windows-with-cygwin

有关

答案 4 :(得分:0)

我也遇到了这个问题,我发现罪魁祸首是在环境加载期间查询数据库并阻止sqlite3文件被删除的引擎中的初始化器:

module Frame
  class Engine < ::Rails::Engine
    isolate_namespace Frame

    # Engine initializer causing the problem.
    initializer "frame.wrap_parameters" do
      ActiveSupport.on_load(:action_controller) do
        if respond_to?(:wrap_parameters)

          # This is the problem line,  Link is a model and Link.attribute_names
          # is accessing the DB.
          wrap_parameters Link, include: Link.attribute_names + [:parent_id]

        end 
      end
    end

  end
end

我通过从初始化程序中删除数据库要求来修复它。

关于这个问题的奇怪之处在于测试在为引擎运行它们时会起作用,但是当引擎安装在项目中时,它不会导致所有项目的测试都失败。