Remova o ActiveRecord em Rails 3
-
19-09-2019 - |
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?
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 tenhorequire 'rails/all'
ourequire "active_record/railtie"
. Em vez só 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 oconfig.generators
seção, verifique se não tem a linhag.orm :active_record
. Você pode definir isso explicitamente paranil
, se você quiser, mas esse deve ser o padrão quandog.orm
é completamente omitido.Opcional, mas em seu
Gemfile
, remova ogem
linha que carrega o módulo para o seu banco de dados. Esta pode ser a linhagem "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'
ougem 'pg'
. Em Config/Application.rb, substitua
require 'rails/all'
comrequire "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)