Pergunta

Agora que o Rails 3 Beta está fora, pensei em dar uma olhada em reescrever um aplicativo em que comecei a trabalhar no Rails 3 beta, ambos para ter uma ideia e ter um pouco de partida. O aplicativo usa o MongoDB e o MongoMapper para todos os seus modelos e, portanto, não precisa de ActiveRecord. Na versão anterior, estou descarregando o ActiveRecord da seguinte maneira:

config.frameworks -= [ :active_record ]    # inside environment.rb

Na versão mais recente, isso não funciona - apenas lança um erro:

/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*

Obviamente, olhei para o boot.rb como ele sugeriu, mas até onde posso ver, não há idéia aqui de como eu posso descarregar AR. A razão pela qual preciso fazer isso é porque não é apenas bobagem estar carregando algo que eu não quero, mas também está reclamando da sua incapacidade de fazer uma conexão de banco de dados, mesmo quando tento executar um gerador para um controlador. Isso é porque eu limpei database.yml e substituiu -o por detalhes da conexão para o MongoDB para usar esta essência Para usar o database.yml para detalhes de conexão do MongoDB. Não sei por que ele precisa ser capaz de iniciar uma conexão de banco de dados apenas para gerar um controlador de qualquer maneira ....

Alguém está ciente da maneira correta do Rails 3 de fazer isso?

Foi útil?

Solução

Estou seguindo isso lendo a fonte, então me avise se realmente funcionou. :)

o rails comando que gera o modelo de aplicativo agora tem uma opção -O, que diz para pular o ActiveRecord.

Se você não sentir vontade de reencontrar rails, você deve verificar o seguinte em seu aplicativo existente:

  • Verifique se é o seu config/application.rb não tenho require 'rails/all' ou require "active_record/railtie". Em vez O seguinte requer:

    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
    
  • Se, em config/application.rb, você está usando o config.generators seção, verifique se não tem a linha g.orm :active_record. Você pode definir isso explicitamente para nil, se você quiser, mas esse deve ser o padrão quando g.orm é completamente omitido.

  • Opcional, mas em seu Gemfile, remova o gem linha que carrega o módulo para o seu banco de dados. Esta pode ser a linha gem "mysql" por exemplo.

Outras dicas

Rails 4

Eu estava procurando como desativá -lo no Rails 4 e só encontrei essa resposta que não funciona mais no Rails 4. Portanto, é assim que você pode fazê -lo no Rails 4 (testado em RC1).

Em um novo projeto

rails new YourProject --skip-active-record

Em um projeto existente

  • No seu GemFile, remova a gema do driver do banco de dados, por exemplo, gem 'sqlite3' ou gem 'pg'.
  • Em Config/Application.rb, substitua require 'rails/all' com

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

  • Em config/ambientes/desenvolvimento.rb, remova ou comente config.active_record.migration_error = :page_load

  • Potencialmente, você deve remover os ajudantes ativos do Active_Record do spec_helper (via veneno nos comentários)

  • Potencialmente, você precisa remover o middleware da conexão de gerenciamento (parece ser o caso da Unicorn): config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement" (através da https://stackoverflow.com/a/18087332/764342)

Espero que isso ajude outras pessoas a procurar como desativar o ActiveRecord no Rails 4.

Para um novo aplicativo Rails, você pode excluir o registro ativo especificando o parâmetro--SKIP-Active-Record. Por exemplo:

rails new appname --skip-active-record

Se você gerou um novo projeto usando o Rails 3.2, também precisará comentar:

config.active_record.mass_assignment_sanitizer = :strict

e

config.active_record.auto_explain_threshold_in_seconds = 0.5

na tua desenvolvimento.rb Arquivo.

Todos os itens acima são verdadeiros. A única coisa que eu tive que fazer no Rails 3.1 é para comentar

config.active_record.identity_map = true

dentro config/application.rb.

Se você estiver executando o RSPEC, também precisará remover (em spec_helper):

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

e remova

  # 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

Também Comente Fora

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

(observado no Rails 3.2.13)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top