2014-05-16 4 views
5

में स्थापित करें, मैं अपने मणि के बिन डीआईआर में एक शेल स्क्रिप्ट रखना चाहता हूं, साथ ही पैकेज के अन्य रूबी कार्यक्रमों के साथ। मैं इस शेल स्क्रिप्ट को बिन निर्देशिका में स्थापित करना चाहता हूं (यानी, कोई रैपर नहीं है)। क्या रूबी रत्नों के साथ यह संभव है? अन्यथा संभव नहीं होने पर मैं पोस्ट-इंस्टॉल हुक से खुश रहूंगा। किसी के पास इसका कोई अनुभव है?रूबी मणि के साथ एक शेल स्क्रिप्ट को तैनात करें और बिन निर्देशिका

+1

आपने क्या प्रयास किया है? जहां तक ​​मुझे पता है कि काम करना चाहिए। एक रैपर लागू किया जा सकता है, लेकिन यह एक बड़ा मुद्दा नहीं होना चाहिए। यह ज्यादातर 'बंडल निष्पादन' जैसी चीजें सही ढंग से काम करेगी। – tadman

+0

दुर्भाग्यवश, यह एक मुद्दा है। रैपर एक रूबी स्क्रिप्ट है जो मेरी शेल स्क्रिप्ट लोड करने और इसे रूबी प्रोग्राम के रूप में निष्पादित करने का प्रयास करता है। बैश सिंटैक्स का सामना करते समय यह स्पष्ट रूप से बारफ है। – scientistician

+0

यदि आप रूबी मणि लिख रहे हैं, तो आपको इसे सम्मेलनों के साथ चिपकने की ज़रूरत है। उनमें से एक उम्मीद है कि आपकी स्क्रिप्ट रूबी के संस्करण के साथ संगत होगी जिसे उपयोगकर्ता ने चुना है। यदि आपको शेल स्क्रिप्ट चलाने की आवश्यकता है, तो आप अपनी रूबी प्रक्रिया को उसी तर्क के साथ एक बैश स्क्रिप्ट में बदलने के लिए हमेशा 'exec' का उपयोग कर सकते हैं। – tadman

उत्तर

4

यह समस्या यहाँ वर्णित है: https://github.com/rubygems/rubygems/issues/88

मणि आप विकसित कर रहे हैं अपने स्वयं के उपयोग के लिए ही इरादा है, तो आप बस इसे

gem install --no-wrapper my_gem 

साथ स्थापित कर सकते हैं मुझे लगता है कि आप सबसे अच्छा था एक रूबी स्क्रिप्ट लिखें जो आपकी बैश स्क्रिप्ट चलाती है। यहाँ कैसे ऐसा करने के लिए पर एक उदाहरण है:


bin/test_gem

#!/usr/bin/env ruby 

bin_dir = File.expand_path(File.dirname(__FILE__)) 
shell_script_path = File.join(bin_dir, 'test_gem.sh') 

`#{shell_script_path}` 

bin/test_gem.sh

#!/bin/sh 

echo "Hello World!" 

test_gem.gemspec

spec.files = [ 
    # ... 
    'bin/test_gem', 'bin/test_gem.sh' 
] 

# ... 

spec.executables = ['test_gem'] 

नोट: एक्ज़िक्यूटेबल में bin फ़ोल्डर में दोनों फ़ाइलों को स्थापित करने के लिए मत भूलना!

ध्यान दें कि जब test_gem.shfiles RubyGems कमांड के साथ पंजीकृत है, यह executables के रूप में पंजीकृत नहीं है: यह सिर्फ स्थापित मणि की निर्देशिका में रखा जाएगा लेकिन लिपटे/shimmed नहीं।

यदि आप अपना मणि इंस्टॉल करते हैं (और यदि आवश्यक हो तो rbenv rehash चलाएं), test_gem पर कॉल करने से आपकी शेल स्क्रिप्ट निष्पादित रूबी स्क्रिप्ट होगी।

संबंधित मुद्दे