Questo è un progetto non Web di Ruby che utilizza ActiveRecord per comunicare con il database.ActiveRecord :: Avviso di deprecazione della migrazione: richiede la versione di Rails, ma non utilizzo Rails
C'è un singolo file che contiene il codice di connessione db, la migrazione e il modello. Vedi qui (ma non è necessario leggere questo per rispondere alla domanda)
require 'sqlite3'
require 'active_record'
require 'yaml'
require 'active_support/all'
require 'securerandom'
BasePath = "#{File.dirname(__FILE__)}/.."
DATABASE_FILENAME = "database.sqlite"
DATABASE_PATH = "#{BasePath}/#{DATABASE_FILENAME}"
SQLite3::Database.new(DATABASE_PATH)
ActiveRecord::Base.establish_connection(
adapter: 'sqlite3',
database: DATABASE_PATH
)
class Migrations < ActiveRecord::Migration
def up
create_table :todos do |t|
t.string :content
t.boolean :completed
t.timestamps null: false
end
end
def down
puts "backing up database".red_on_black if File.file?(DATABASE_PATH)
loop { (`cp #{DATABASE_PATH} #{DATABASE_PATH}-#{SecureRandom.urlsafe_base64}.backup`; break) rescue next }
sleep 0.5
drop_table :todos
puts "dropped todos table"
end
end # Migrations
class Todo < ActiveRecord::Base
end
La domanda è su questa linea:
class Migrations < ActiveRecord::Migration
Quando eseguo la migrazione con Migrations.migrate(:up)
, ho un deprecazione warning:
DEPRECATION WARNING: Directly inheriting from ActiveRecord::Migration is deprecated.
Please specify the Rails release the migration was written for:
class Migrations < ActiveRecord::Migration[4.2]
Piaccia ti ricorda cambiare la mia definizione di classe a
class Migrations < ActiveRecord::Migration[4.2]
E quindi non ricevo più l'avviso.
Mi chiedo se qualcuno può spiegare lo scopo di questo.
La mia app non dipende da nessuna versione di Rails. Perché dovrei aver bisogno di
per specificare una versione di Rails?
Wow! @rafaelfranca! grazie per aver spiegato qui ..;) +1 – uday
Questo ha senso anche se è fonte di confusione per le persone che utilizzano AR al di fuori di binari. –
@rafaelfranca Qualche consiglio su come i mantenitori di gem possono aggiornare gli script di migrazione generati automaticamente per supportare entrambi i binari 4.1 e precedenti e la nuova API di migrazione Rails? Le soluzioni che ho usato per questo sono hacky. Ad esempio: '' 'if Rails :: VERSION :: STRING [0..2] .to_f> = 5 active_record_migration_class = ActiveRecord :: Migration [Rails :: VERSION :: STRING [0..2] .to_f] altro active_record_migration_class = ActiveRecord :: Migration end''' C'è qualcosa di più elegante? – Kelseydh