Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 删除Rails 3中的ActiveRecord_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 删除Rails 3中的ActiveRecord

Ruby on rails 删除Rails 3中的ActiveRecord,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,既然Rails 3 beta版已经推出,我想我应该看看如何重写一个我刚刚开始在Rails 3 beta版中开发的应用程序,这样既能让我感觉到它的存在,又能让我领先一步。该应用程序对其所有型号使用MongoDB和MongoMapper,因此不需要ActiveRecord。在以前的版本中,我以以下方式卸载activerecord: config.frameworks -= [ :active_record ] # inside environment.rb 在最新版本中,这不起作用-它只是抛

既然Rails 3 beta版已经推出,我想我应该看看如何重写一个我刚刚开始在Rails 3 beta版中开发的应用程序,这样既能让我感觉到它的存在,又能让我领先一步。该应用程序对其所有型号使用MongoDB和MongoMapper,因此不需要ActiveRecord。在以前的版本中,我以以下方式卸载activerecord:

config.frameworks -= [ :active_record ]    # inside environment.rb
在最新版本中,这不起作用-它只是抛出一个错误:

/Library/Ruby/Gems/1.8/gems/railties-3.0.0.beta/lib/rails/configuration.rb:126:in
  `frameworks': config.frameworks in no longer supported. See the generated 
  config/boot.rb for steps on how to limit the frameworks that will be loaded 
  (RuntimeError)
 from *snip*
当然,我已经查看了boot.rb的建议,但据我所知,这里没有关于如何卸载AR的线索。我需要这样做的原因不仅是因为加载我不想要的东西很愚蠢,但它抱怨它无法建立DB连接,即使我尝试运行控制器的生成器。这是因为我已经擦除了database.yml,并将其替换为MongoDB的连接详细信息,以便将database.yml用于MongoDB连接详细信息。不知道为什么它需要能够启动一个DB连接,只是为了生成一个控制器


有人知道Rails 3的正确方法吗?

我通过阅读源代码来了解这一点,所以请告诉我它是否真的有效。:)

生成应用程序模板的
rails
命令现在有一个选项
-O
,告诉它跳过ActiveRecord

如果您不想重新运行
rails
,您应该在现有应用程序中检查以下内容:

  • 检查您的
    config/application.rb
    是否具有
    要求的“rails/all”
    要求的“active\u record/railtie”
    。相反,对于没有ActiveRecord的标准Rails设置,它应该只有以下要求:

    require File.expand_path('../boot', __FILE__)
    
    require "action_controller/railtie"
    require "action_mailer/railtie"
    require "active_resource/railtie"
    require "rails/test_unit/railtie"
    require "sprockets/railtie"
    
    # Auto-require default libraries and those for the current Rails environment. 
    Bundler.require :default, Rails.env
    
  • 如果在
    config/application.rb
    中使用的是
    config.generators
    部分,请确保该部分没有行
    g.orm:active\u record
    。如果需要,您可以将其显式设置为
    nil
    ,但当完全忽略
    g.orm
    时,这应该是默认值

  • 可选,但在
    gem文件
    中,删除为数据库加载模块的
    gem
    行。例如,这可能是行
    gem“mysql”


    • 以上所有内容都是正确的。在rails 3.1中,我还需要做的一件事是注释掉

      config.active_record.identity_map = true
      

      在新rails应用程序的
      config/application.rb

      中,您可以通过指定--skip active record参数使其排除活动记录。例如:

      rails new appname --skip-active-record
      

      如果您使用Rails 3.2生成了一个新项目,您还需要注释掉:

      config.active_record.mass_assignment_sanitizer = :strict
      


      在您的development.rb文件中。

      注释

      # config/application.rb    
      config.active_record.whitelist_attributes = true
      

      (在rails 3.2.13中有说明)

      如果您正在运行rspec,还需要删除(在spec\u帮助程序中):

      移除

        # If you're not using ActiveRecord, or you'd prefer not to run each of your
        # examples within a transaction, remove the following line or assign false
        # instead of true.
        config.use_transactional_fixtures = true
      

      Rails 4

      我一直在寻找如何在Rails4中禁用它,但只找到了这个在Rails4中不再有效的答案。这就是在rails 4(在RC1中测试)中实现的方法

      在新项目中

      rails new YourProject --skip-active-record
      
      在现有项目中

      rails new YourProject --skip-active-record
      
      • 在gem文件中,删除数据库驱动程序gem,例如
        gem'sqlite3'
        gem'pg'
      • 在config/application.rb中,将
        require'rails/all'
        替换为 require "action_controller/railtie" require "action_mailer/railtie" require "sprockets/railtie" require "rails/test_unit/railtie" 需要“控制器/轨道连接的操作” 要求采取“行动”\u邮递员/railtie 需要“链轮/系杆” 需要“轨道/测试单元/钢轨接头”

      • 在config/environments/development.rb中,删除或注释掉
        config.active\u record.migration\u error=:page\u load

      • 您可能需要从spec_helper中删除活动的_record helper(通过注释中的VenoM)

      • 您可能必须删除ConnectionManagement中间件(unicorn似乎就是这样):
        config.app\u middleware.delete“ActiveRecord::ConnectionAdapters::ConnectionManagement”
        (via)


      我希望这能帮助其他人寻找如何在Rails 4中禁用ActiveRecord。

      。似乎-O选项也可以作为“--skip-activerecord”调用。我使用此选项为另一个(临时)应用程序运行了rails命令,它生成了一个新的应用程序模板,与您上面所写的完全匹配。所以我可以把这些更改复制粘贴到我的实际应用程序上。谢谢-很好的发现:)很好-谢谢你的-跳过activerecord。这正是我所需要的。除了运行rails generate(我仍然在那里看到ActiveRecord的东西)时,这在大多数情况下都有效。如何删除它?在rails 3.1中,您还需要在
      应用程序.rb
      文件中包含
      require“sprockets/railtie”
      。只需对这个答案和我之前的评论添加一个快速更新。。。在Rails 3.1中,它现在是
      ——跳过活动记录。注意额外的破折号。我这样做了,并运行了一些差异来查找和删除我当前使用ActiveRecord的应用程序中的内容。谢谢!仍然需要从spec_帮助程序中删除活动的_记录帮助程序(不是强制性的,但如果您正在运行spec)。请参阅Rimian的最后评论。帮助了我,谢谢!根据下面的注释,在application.rb和/或environments/{env}.rb文件中可能有其他配置声明要注释掉。YMMV.activerecord仍保留在gemfile.lock中。。。“我们能做点什么反对它吗?”博蒂不太可能。这是rails的一部分。要从.lock中删除它,我想您必须删除对rails的依赖,并依赖于所有单独的组件。查看gemspec中的依赖项列表——除了activerecord之外,您可能还需要依赖其他任何东西。在进行此更改后,我似乎遇到了与i18n相关的问题:lib/active_support/i18n.rb:13:in`':未初始化常量i18n(NameError)。有什么想法吗?
      require "action_controller/railtie"
      require "action_mailer/railtie"
      require "sprockets/railtie"
      require "rails/test_unit/railtie"