Desativar ActiveRecord para Rails 4

113

Eu quero desabilitar o ActiveRecord no Rails 4. Eu fiz o seguinte em 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

Por eu tenho um erro de

/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)
ア レ ッ ク ス
fonte
4
Por que não usar apenas rails new ... -Opara desativar o registro ativo?
Yevgeniy Anfilofyev
O app_middleware.delete é necessário? Pode até estar causando o problema?
9,
Para aplicativos de trilhos 4/5/6 existentes, você pode desativar o registro ativo seguindo esta resposta .
Alter Lagos

Respostas:

261

Se estiver criando um novo aplicativo, você pode usar -Opara pular o ActiveRecord:

rails new my_app -O

Para aplicativos existentes:

1. Remova as joias do adaptador de banco de dados de seu Gemfile (mysql2, sqlite3, etc.)

2. Mude o seu config/application.rb

Remova a require 'rails/alllinha e exija os frameworks (dentre os disponíveis em sua railsversão, a lista varia, não apenas copie) que deseja usar, por exemplo:

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

Remover config.active_record.raise_in_transactional_callbacks = truedeconfig/application.rb

3. Exclua seu config/database.ymlarquivo db/schema.rbe migrações (se houver)

4. Excluir check-in de migração test/test_helper.rb

5. Exclua qualquer configuração ActiveRecord de seus config/environmentsarquivos (isso é o que está causando o erro)

Isso é tudo que você precisa fazer para um aplicativo Rails vazio. Se você encontrar problemas causados ​​por seu código existente, o rastreamento de pilha deve fornecer informações suficientes sobre o que você precisa alterar. Você pode, por exemplo, ter alguma configuração ActiveRecord em seus inicializadores.

peixe mecânico
fonte
2
Além dessas mudanças, também tive que remover algumas linhas de spec_helpers.rb (usando RSpec): sobre acessórios e transações. Eu também estava usando active_model, então substituí active_record por active_model na lista de requisitos aqui: stackoverflow.com/questions/19078044/…
arnab
3
Onde posso ver uma lista dos frameworks Rails disponíveis, a serem requeridos no lugar de 'rails / all'?
emilesilvis
18
A lista de todos os itens require 'rails/all'incluídos pode ser encontrada aqui .
dena
3
Criei um aplicativo com rails new my_app -Oum mês atrás. Agora quero o registro ativo de volta. Quais são os arquivos / gemas / configuração que preciso adicionar agora?
Jak
1
Eu também tive de remover config.active_record.raise_in_transactional_callbacks = truea partir config/application.rb.
B Sete
15

Olá, isto é o que o new_app -O do rails padrão oferece

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"

dentro do seu config / application.rb

Além disso, ele vem sem database.yml e NO db / migrate / * e schema.rb

Jasmo2
fonte
4
e para rails 5 <= addrequire "action_cable/engine"
rails_id
7

Já que este ainda é o primeiro hit ao pesquisar no Google para desativar o registro ativo para Rails 5, vou adicionar isso aqui:

Para Rails 5

Siga todas as etapas na resposta @mechanicalfish, mas também remova a linha

Rails.application.config.active_record.belongs_to_required_by_default = true

de

config/initializers/new_framework_defaults.rb
mmeyers
fonte
5

Para aqueles que usam a gem rails-api, você pode encontrar um erro semelhante ao usar o --skip-active-recordsinalizador ao fazer rails-api new my_api. A correção atual (até que uma nova versão corrigida da gem seja lançada) é editar sua gem rails-api para ter este commit . Use bundle opene substitua o antigo Gemfilepelo novo corrigido. Execute novamente e você deve estar pronto.

Alex Moore-Niemi
fonte
4

Para desabilitar ActiveRecord no Rails 4.2 você pode criar 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

Veja o middleware de terminal rake

Vinicius luiz
fonte
4

Para Rails 5:

Se você estiver gerando um novo aplicativo

Use a --skip-active-recordopção de gerar um aplicativo sem banco de dados:

rails new myApp --skip-active-record

Observe o hífen extra '-' ao contrário das versões anteriores do Rails.

Crimbo
fonte
1
Caso você já tenha criado seu projeto sem pular o registro ativo, apenas comente todas as referências active_record em config / environment / # config.active_record.verbose_query_logs = true # config.active_record.migration_error =: page_load E renomeie seu arquivo database.yml para outra coisa . Isso fez tudo para mim.
Juan Ricardo
1
também comente esta linha em bin / setup => # system! 'bin / rails db: setup'
Juan Ricardo
1

Para plug-ins Rails (ou gems) com um spec/dummyaplicativo

Quando seu aplicativo rails está instalado spec/dummye você inicia seu servidor a partir do diretório raiz do plugin. Você ainda pode receber o seguinte erro:

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

Para evitar isso, remova require rails/alldentro do arquivo bin/railse exija as estruturas que deseja usar, por exemplo:

# 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"
rya brody
fonte
-1

Para Ruby On Rails versão 5.1.x

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 "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"
Kamil Załęski
fonte