2015-12-02 14 views
7

Sto costruendo un motore di rotaie che utilizza chiavi esterne nelle migrazioni.dipendenze gemma rubino condizionale all'interno di un gemspec

add_foreign_key "theblog_content_nodes", 
        "theblog_content_statuses", column: :content_status_id 

dalla versione 4.2 rotaie supporta le chiavi esterne di per sé, ma prima abbiamo usato foreigner gioiello per questo. Se proviamo a utilizzare foreigner con rails 4.2 e più recente si ottiene un errore.

Quindi, dal momento che ho intenzione di supportare i binari a partire dalla 4.0.1, devo utilizzare la dipendenza condizionale nel mio gemspec.

Ho trovato la soluzione possibile here ma non ho idea di come controllare la versione di rails nel gemspec.

# sidekiq-spy.gemspec 

if RUBY_VERSION >= '2.1' 
    spec.add_development_dependency "curses", "~> 1.0" 
end 

NOTA:

ho un'altra soluzione temporanea: ho solo controllare Foreigner disponibilità nei miei migrazioni. Se è disponibile solo che non mi creo chiavi esterne:

if defined?(Foreigner) 
    add_foreign_key "theblog_content_nodes", 
        "theblog_content_statuses", column: :content_status_id 
end 

Ma vorrei aggiungere foreigner dipendenza per le vecchie versioni rotaie.

+0

ne pensi fornire due diverse versioni del vostro gioiello per che gli scenari? – iltempo

+0

@iltempo, posso persino usare l'unica versione per entrambi gli scenari. Basta aggiungere la nota che dobbiamo aggiungere 'gem" foreigner "' a 'Gemfile' se la versione di Rails è inferiore a' 4.2' e vogliamo usare chiavi esterne. –

risposta

2

Per la versione di accesso rotaie, possiamo usare qualcosa di simile qui di seguito (in base a this answer):

require 'rubygems' 

rails_gem = Gem::Specification.select {|z| z.name == "rails"}.max_by {|a| a.version} 
p rails_gem.version.version 
#=> "4.2.5" 
+0

Purtroppo sembra che non abbiamo accesso a 'Rails' all'interno del gemspec. Ho appena avuto il seguente errore: 'Rails costanti non inizializzate da /Users/kont/projects/theblog/theblog.gemspec:21:in 'blocco in

'' –

+0

Aggiornata la risposta a usare 'rubygems' API. Si prega di verificare se questo funzionerà per voi –

+0

Ho provato questo sia nel motore stesso e nell'app utilizzando questo motore. Sembra funzionare correttamente. Grazie! –

Problemi correlati