Rails 3でActiveRecordを削除する


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接続を確立できないことについて不満があるためです。これは、MonoDBの接続の詳細にdatabase.yml database.ymlを使用するためにこの要点を使用するために、MongoDBの接続の詳細にワイプして置き換えたためです。とにかくコントローラーを生成するためだけにDB接続を開始できる必要がある理由がわかりません...

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

回答:


155

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

railsアプリケーションテンプレートを生成するコマンドは現在のオプションがある-OのActiveRecordをスキップすることを伝えます。

再実行したくない場合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.rbconfig.generatorsセクションを使用している場合は、セクションに行がないことを確認してくださいg.orm :active_recordnil必要に応じて、これを明示的にに設定できますが、g.ormが完全に省略されている場合、これをデフォルトにする必要があります。

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


3
うん、それはそれをやったようだ。-Oオプションは '--skip-activerecord'としても呼び出すことができるようです。このオプションを使用して、別の(一時的な)アプリに対してrailsコマンドを実行したところ、上記の記述と完全に一致する新しいアプリテンプレートが生成されました。したがって、これらの変更をコピーして実際のアプリに貼り付けることができます。ありがとう
-nice

1
すばらしい---skip-activerecordに感謝。それが私が必要としていたことです。
Finglas、2010年

これは、rails generateを実行する場合を除いて、ほとんどの部分で機能します-まだActiveRecordが表示されています-削除するにはどうすればよいですか?
Hackeron、2011年

8
Rails 3.1 require "sprockets/railtie"では、application.rbファイルに含める必要もあります。
erskingardner 2011

1
この回答と私の以前のコメントに簡単な更新を追加するだけです... Rails 3.1では、今--skip-active-recordです。余分なダッシュに注意してください。
Mark Embling、2011

46

Rails 4

私はレール4でそれを無効にする方法を探していましたが、レール4では機能しないこの回答しか見つかりませんでした。したがって、これはレール4でそれを行う方法です(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 / environments / development.rbで、削除するかコメント化します config.active_record.migration_error = :page_load

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

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

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


3
ありがとう!それでも、spec_helperからactive_recordヘルパーを削除する必要があります(必須ではありませんが、スペックを実行している場合)。Rimianによる最後のコメントを参照してください。
VenoM 2013

助けてくれてありがとう!以下のコメントに従って、application.rbおよび/またはenvironments / {env} .rbファイルでコメント化する他の構成宣言がある場合があります。YMMV。
Nathan Smith

activerecordはまだgemfile.lockに残っています...それに対して何かできますか?
ボティ2013

@Botiありそうもない。レールの一部です。.lockからそれを削除するには、レールへの依存関係を削除し、個々のすべてのコンポーネントに依存する必要があると思います。依存関係のリストについては、gemspecを確認してください。activerecord以外のすべてのものに依存する必要があります。github.com/rails/rails/blob/master/rails.gemspec
John Hinnegan

この変更を行った後、i18n関連の問題が発生しているようです:lib / active_support / i18n.rb:13:in `<top(required)> ':初期化されていない定数I18n(NameError)。何か案は?
Michael Pell 2014

36

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

rails new appname --skip-active-record

私はこれを実行し、いくつかの差分を実行して、現在のアプリでActiveRecordを使用していたものを見つけて削除しました
Keith Smiley

15

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

config.active_record.mass_assignment_sanitizer = :strict

そして

config.active_record.auto_explain_threshold_in_seconds = 0.5

あなたのdevelopment.rbファイルで。


6

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

config.active_record.identity_map = true

の中でconfig/application.rb


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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.