2015-12-02 16 views
7

私は、移行時に外部キーを使用するレールエンジンを構築しています。バージョン4.2レールからgemspec内の条件付きルビの宝石の依存関係

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

は、それ自体で外部キーをサポートしていますが、我々はこのためにforeigner宝石を使用する前に。 foreignerrails 4.2とを使用しようとするとエラーが発生します。

4.0.1から始まるレールをサポートする予定なので、私はgemspecで条件依存性を使用する必要があります。

私は可能な解決策を見つけましたhereしかし、私はどのようにgemspecのレールバージョンをチェックするのか分かりません。

# sidekiq-spy.gemspec 

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

注:

私は別の一時的な解決策を持っている:私はちょうど私の移行にForeigner可用性をチェック。それが使用できない場合、私はちょうど外部キーを作成しないでください:

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

しかし、私は古いレールバージョンのforeigner依存関係を追加したいと思います。アクセス・レールバージョンに

+0

あなたはそのシナリオのために、あなたの宝石の2つの異なるバージョンを提供すると思いますか? – iltempo

+0

@iltempo、どちらのシナリオでも1つのバージョンを使用することもできます。 Railsのバージョンが '4.2'よりも小さく、私たちが外部キーを使いたい場合は' gemfile'に 'gem" foreigner "を追加しなければならないことに注意してください。 –

答えて

2

、我々は(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

残念ながら、私たちはgemspec内の 'Rails'へのアクセス権がないようです。私は次のエラーを持っている :「

でブロック」 /Users/kont/projects/theblog/theblog.gemspec:21:inから '初期化されていない定数Railsは' –

+0

は 'rubygems'を使用するために答えを更新しましたAPI。これがあなたのために働くかどうかを確認してください –

+0

私はこのエンジンを使ってエンジン自体とアプリの両方でこれを試しました。それは適切に動作するようです。ありがとう! –

関連する問題