【问题标题】:Rails : Rake Test:functionals cannot access DB (Sqlite3 on winXP)Rails:Rake 测试:功能无法访问数据库(winXP 上的 Sqlite3)
【发布时间】:2010-11-17 02:16:50
【问题描述】:

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

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 宝石

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

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

我检查了权限,没有问题。

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

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

感谢任何帮助。

谢谢

【问题讨论】:

  • 其他命令,如 rake db:migrate 或 purge 或 clone 正在这个数据库上工作。只有 test:functionals 失败了。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我的行为非常非常相似:Windows XP、SQLite3、Rails 2.3.4、Rake 0.8.7、Ruby 1.8.6

    耙式测试

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

    rake 测试:单位

    rake 测试:功能

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

    所以……长话短说……我把它注释掉了。

    这不是修复,但足以让测试为我工作。

    【讨论】:

    • 那条线对我来说似乎也是问题......不过不知道该怎么办!
    【解决方案3】:

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

    chmod 777 <your-files>
    

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

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

    【讨论】:

    • 不,我在 Windows 下运行。还是试了一下,还是不行。
    【解决方案4】:

    只是一个平底船,但是您是否尝试过将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

    有关

    【讨论】:

      【解决方案5】:

      我也遇到了这个问题,我发现罪魁祸首是引擎中的初始化程序,该引擎在环境加载期间查询数据库并阻止删除 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
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 1970-01-01
        • 2012-05-03
        • 2020-11-23
        • 2020-04-07
        • 1970-01-01
        相关资源
        最近更新 更多