यह आरवीएम (या रूबी के बीच स्विच करने के लिए अन्य समान उपकरण) और rake-compiler का उपयोग करके लक्षित विभिन्न प्लेटफार्मों के लिए मणि को पार करने के द्वारा किया जाता है।
gemspec
फ़ाइल प्रत्येक प्लेटफॉर्म के लिए आवश्यक फ़ाइलों को निर्दिष्ट करना होगा; इस मंच की जाँच के द्वारा किया जाता है मणि के साथ संकलित किया जा रहा है:
spec = Gem::Specification.load('hello_world.gemspec')
if RUBY_PLATFORM =~ /java/
require 'rake/javaextensiontask'
Rake::JavaExtensionTask.new('hello_world', spec)
else
require 'rake/extensiontask'
Rake::ExtensionTask.new('hello_world', spec)
end
लेकिन आप विशिष्ट क्या करने की जरूरत हो सकता है: Rakefile
में
Gem::Specification.new do |gem|
# . . .
if RUBY_PLATFORM =~ /java/
# package jars
gem.files += ['lib/*.jar']
# . . .
else
# package C stuff
gem.files += Dir['ext/**/*.c']
# . . .
gem.extensions = Dir['ext/**/extconf.rb']
end
end
, rake-compiler
स्थापित करने के बाद, पैटर्न आमतौर पर निम्नलिखित है विभिन्न प्लेटफॉर्म के लिए कार्य।
एमआरआई के साथ, तो आप rake native gem
के साथ संकलित करें; JRuby के साथ, rake java gem
- यह वह जगह है जहां आरवीएम जैसे टूल आसान हो जाते हैं। अंत में आप अपने मणि के लिए अलग-अलग मणि फाइलों के साथ समाप्त होते हैं, प्रति प्लेटफॉर्म पर, जिसे आप अपने मणि के रूप में रिलीज़ कर सकते हैं।
अधिक जानकारी के लिए rake-compiler documentation देखें, या इस तरह के redcloth या pg_array_parser (मुझे लगता है कि वे इस के लिए nokogiri की तुलना में बेहतर उदाहरण हैं) के रूप में अन्य परियोजनाओं है कि एक ही करते हैं, की जाँच करें।
स्रोत
2012-11-24 11:25:26
यह भी देखें http://stackoverflow.com/questions/3642085/make-bundler-use-different-gems-for- dififferent-platforms – knut
यही वह बात नहीं है जिसके बारे में मैं बात कर रहा हूं। मैं एक मणि बनाना चाहता हूं, और जब कोई और इसे एमआरआई के साथ उपयोग करने का प्रयास करता है तो वह सी कोड का उपयोग करेगा, और जब वे इसे JRuby से उपयोग करेंगे तो यह जावा कोड का उपयोग करेगा। नोकोगिरी और प्यूमा रत्न ऐसा करते हैं, और मैंने उनके कोड पर देखा है, लेकिन यह नहीं देखा कि वे इसे कैसे बना रहे थे – jshen
रूबी में मणि लिखना सबसे आसान तरीका है, इस तरह आप इसे 'jRuby' पर चलाते हैं , 'एमआरआई' या कोई कार्यान्वयन। यह ठीक चल जाएगा। आपने निर्दिष्ट नहीं किया है कि आपके मणि के लिए बाहरी निर्भरता क्या हैं। – nikhil