99

Rails 3ベータ版がリリースされたので、Rails 3ベータ版で作業を開始したばかりのアプリを書き直して、その感触をつかみ、少し有利なスタートを切ることを検討したいと思いました。このアプリは、すべてのモデルに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接続を確立できないという不満があるためです。これは、MongoDB接続の詳細にdatabase.ymlを使用するためにこの要点database.ymlを使用するために、MongoDBの接続の詳細を消去して置き換えたためです。とにかくコントローラーを生成するためだけにDB接続を開始できる必要がある理由がわかりません。

誰かがこれを行う正しいRails3の方法を知っていますか?

4

7 に答える 7

155

私はソースを読んでこれを行っているので、それが実際に機能したかどうかを知らせてください。:)

アプリケーションテンプレートを生成するコマンドに、 ActiveRecordをスキップするように指示railsするオプションが追加されました。-O

再実行したくない場合はrails、既存のアプリで次のことを確認する必要があります。

  • config/application.rb またはがないことを確認してrequire 'rails/all'くださいrequire "active_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_recordください。必要に応じて、これを明示的にに設定できますが、が完全に省略されているnil場合は、これがデフォルトになります。g.orm

  • オプションですが、で、データベースのモジュールをロードする行をGemfile削除します。gemこれはgem "mysql"、たとえば行である可能性があります。

于 2010-02-06T11:02:58.557 に答える
46

Rails 4

Rails 4で無効にする方法を探していましたが、Rails4では機能しなくなったこの回答しか見つかりませんでした。これがRails4(RC1でテスト済み)で実行できる方法です。

新しいプロジェクトで

rails new YourProject --skip-active-record

既存のプロジェクトで

  • Gemfileで、データベースドライバgemを削除します(例:gem 'sqlite3'または)gem 'pg'
  • config / application.rbで、次のように置き換えrequire 'rails/all'ます

    「action_controller/railtie」が必要
    「action_mailer/railtie」が必要
    「スプロケット/レールタイ」が必要
    「rails/test_unit/railtie」が必要
    

  • config / environment / development.rbで、削除またはコメントアウトしますconfig.active_record.migration_error = :page_load

  • 潜在的に、spec_helperからactive_recordヘルパーを削除する必要があります(コメントのVenoMを介して)

  • 潜在的に、ConnectionManagementミドルウェアを削除する必要があります(ユニコーンの場合のようです):( https://stackoverflow.com/a/18087332/764342config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"経由)

これが、Rails4でActiveRecordを無効にする方法を探している他の人に役立つことを願っています。

于 2013-05-18T10:19:48.597 に答える
36

新しいRailsアプリの場合、-skip-active-recordパラメーターを指定することで、アクティブレコードを除外することができます。例えば:

rails new appname --skip-active-record
于 2011-12-18T22:56:07.733 に答える
15

Rails 3.2を使用して新しいプロジェクトを生成した場合は、コメントアウトする必要もあります。

config.active_record.mass_assignment_sanitizer = :strict

config.active_record.auto_explain_threshold_in_seconds = 0.5

development.rbファイルにあります。

于 2012-02-04T06:56:14.360 に答える
6

上記のすべてが当てはまります。Rails 3.1でやらなければならなかったもう1つのことは、コメントアウトすることです。

config.active_record.identity_map = true

config/application.rb

于 2011-05-27T18:06:26.830 に答える
2

rspecを実行している場合は、(spec_helperで)削除する必要もあります。

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

削除します

  # 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
于 2013-04-23T10:09:24.580 に答える
1

コメントアウト_ _

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

(レール3.2.13に記載)

于 2013-04-03T15:01:24.003 に答える