web-dev-qa-db-ja.com

Rails 4のActiveRecordを無効にします

RailsでActiveRecordを無効にします。4. config/application.rbで次を実行しました

require File.expand_path('../boot', __FILE__)

# require 'Rails/all'  -- commented

require "action_controller/railtie"
require "action_mailer/railtie"
#require "active_resource/railtie" no need
#require "Rails/test_unit/railtie" no need
#require "sprockets/railtie" no need

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)

module MyApp
  class Application < Rails::Application
     config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"
  end
end

のエラーがあります

/home/alex/.rvm/gems/Ruby-2.0.0-p247/gems/railties-4.0.0/lib/Rails/railtie/configuration.rb:95:in 
  method_missing: undefined method active_record for #<Rails::Application::Configuration:0x00000002005c38> (NoMethodError)
109
アレックス

新しいアプリケーションを作成する場合は、-Oを使用してActiveRecordをスキップできます。

Rails new my_app -O

既存のアプリケーションの場合:

1。 Gemfileからデータベースアダプターgemを削除します(mysql2、sqlite3など)

2。 config/application.rbを変更します

require 'Rails/all行を削除し、使用するフレームワークを要求します。次に例を示します。

require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "Rails/test_unit/railtie"

config.active_record.raise_in_transactional_callbacks = trueからconfig/application.rbを削除します

3。 config/database.ymlファイル、db/schema.rbおよび移行(ある場合)を削除します

4。 test/test_helper.rbの移行チェックを削除します

5。 config/environmentsファイルからActiveRecord設定を削除します(これがエラーの原因です)

空のRailsアプリに対して行う必要があるのはこれだけです。既存のコードが原因で問題が発生した場合、スタックトレースを使用すると、変更する必要があるものに関する十分な情報が得られます。たとえば、初期化子にいくつかのActiveRecord構成がある場合があります。

253
mechanicalfish

こんにちは、これはデフォルトのRails new new_app -Oが与えるものです

require "Rails"
# Pick the frameworks you want: 
require "active_model/railtie" 
require "active_job/railtie"
# require "active_record/railtie" 
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "action_view/railtie" 
require "sprockets/railtie" 
require "Rails/test_unit/railtie"

config/application.rbの中に

さらに、database.ymlおよびNOなしdb/migrate/*およびschema.rb

14
jasmo2

Rails 5のアクティブレコードを無効にするためにGoogleを検索するとき、これはまだ最初のヒットであるため、ここに追加します。

For Rails 5

@mechanicalfish answerのすべての手順を実行しますが、行も削除します

Rails.application.config.active_record.belongs_to_required_by_default = true

から

config/initializers/new_framework_defaults.rb
6
mmeyers

Rails-api gem を使用している場合、--skip-active-recordを実行するときにRails-api new my_apiフラグを使用すると、同様のエラーが発生する可能性があります。現在の修正(gemの新しい修正バージョンがリリースされるまで)は、Rails-api gemを編集して this commit とすることです。 bundle openを使用し、古いGemfileを新しい修正されたものに置き換えます。再実行すると、すべての設定が完了します。

5

Rails 4.2でActiveRecordを無効にするには、config/initializers/middleware.rbを作成します

Rails.application.middleware.tap do |middleware|
  middleware.delete ActiveRecord::Migration::CheckPending
  middleware.delete ActiveRecord::ConnectionAdapters::ConnectionManagement
  middleware.delete ActiveRecord::QueryCache
end

ターミナルを参照してくださいrakeミドルウェア

4
Vinicius Luiz

Rails 5の場合:

新しいアプリを生成する場合

--skip-active-recordオプションを使用して、データベースなしでアプリケーションを生成します。

Rails new myApp --skip-active-record

Railsの以前のバージョンとは対照的に、余分なハイフン「-」に注意してください。

4
Crimbo

Rails spec/dummyアプリを使用したプラグイン(またはgem)の場合

Railsアプリがspec/dummyにあり、プラグインルートディレクトリからサーバーを起動したとき。それでも次のエラーが表示される場合があります。

Cannot load `Rails.application.database_configuration`: Could not load database configuration. No such file - ["config/database.yml"] 

これを回避するには、require Rails/allファイル内のbin/Railsを削除し、使用するフレームワークを要求します。次に例を示します。

# Pick the frameworks you want: 
require "active_model/railtie" 
require "active_job/railtie"
# require "active_record/railtie" 
require "action_cable/engine"
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "action_view/railtie" 
require "sprockets/railtie" 
require "Rails/test_unit/railtie"
0
rya brody