2010-11-21 19 views
10

मैंने एक प्लगइन लिखा जिस पर एक निर्भरता के रूप में एक मणि की आवश्यकता होती है।रेल 3: प्लगइन मणि निर्भरता को परिभाषित करें

मुझे इस निर्भरता को परिभाषित करने के लिए कहां है?

मैंने विक्रेता/प्लगइन्स/my_plugin/में एक Gemfile बनाने की कोशिश की है, लेकिन bundle install इस फ़ाइल को नहीं मिला है।

उत्तर

16

ठीक है। मैंने हल किया है

1) विक्रेता/प्लगइन्स में एक Gemfile बनाएं/चाहते my_plugin:

# Gemfile 
source "http://rubygems.org" 
gemspec 

2) एक gemspec फ़ाइल बनाएँ।

bundle gem my_plugin 

(इस आदेश नोट कुछ फ़ाइलें अधिलेखित के लिए आप से पूछना जवाब से पहले फ़ाइलों की जाँच करें::। Y)

3) ओपन gemspec फ़ोल्डर विक्रेता/प्लगइन्स रन इस आदेश में विक्रेता/plugins/my_plugin में फ़ाइल/और कीवर्ड अंत से पहले जोड़ें:

s.add_dependency('will_paginate', '~> 3.0.pre2') 

(इस उदाहरण में मैं will_paginate का इस्तेमाल किया है कैसे requi my_plugin के लाल dipendency)

4) अब आप अपने रेल app में जाने के लिए और संपादित Gemfile, जोड़ें:

gem 'my_plugin', :path=>'vendor/plugins/my_plugin' 

पथ निर्दिष्ट माना जाता है कि अपने प्लगइन के विक्रेता/प्लगइन्स फ़ोल्डर में पहले से ही है अपने रेल ऐप बेशक जब रेल ऐप तैनात करते हैं तो आपको निर्दिष्ट करने की आवश्यकता नहीं है: पथ तर्क।

5) अब रेल में एप्लिकेशन जड़ कार्य करें:

bundle install 

और my_plugin की निर्भरता (इस मामले में will_paginate) स्थापित किया गया है।

प्रारंभिक इनपुट के लिए साइनेट्रिस के लिए धन्यवाद।

+4

मुझे एक ही समस्या है, लेकिन मेरे मामले में यह एक प्लगइन नहीं है, यह एक इंजन/मणि है। मैंने जैसा कहा था, 'बंडल इंस्टॉल' ने रत्नों को निर्भरताओं के रूप में स्थापित किया है। लेकिन ऐसा प्रतीत होता है कि एप्लिकेशन उन रत्नों को लोड नहीं करता है, या उन्हें प्रारंभ नहीं करता है, जिससे हर जगह अपरिभाषित तरीकों की त्रुटियां होती हैं। इंजन स्वयं ही ठीक काम करता है। क्या आपको पता है कि क्या गुम हो सकता है? – Tiago

+3

मेरे पास टियागो के समान समस्या है, लेकिन मेरा * एक प्लगइन है। 'बंडल इंस्टॉल 'सभी निर्भरताओं को स्थापित करता है - मैं उन्हें Gemfile.lock में देखता हूं - लेकिन वे रेल द्वारा लोड नहीं होते हैं। क्या कमी है? – davemyron

+0

मुझे अपने init.rb को रेल/init.rb पर ले जाना पड़ा जो रेल लोड के बाद लोड होने के बाद लोड किया गया था। इसके अलावा मुझे lib कोड लोड करते समय 'Rails.root' तक पहुंचने में समस्याएं थीं, कुछ इनिट कोड को रेल/init.rb पर ले जाकर हल किया गया। –

0

एप्लिकेशन फ़ोल्डर में Gemfile।

# Bundle the extra gems: 
# gem 'bj' 
# gem 'nokogiri' 
# gem 'sqlite3-ruby', :require => 'sqlite3' 
# gem 'aws-s3', :require => 'aws/s3 
+0

मैं आवेदन – Sebtm

2

आपका विक्रेता/plugins/my_plugin में एक Gemfile बनाएं/जैसे:

# Gemfile 
source "http://rubygems.org" 
gemspec 

gem "your-dependency-gem-name" 

टिप्पणी gemspec निर्देश।

अधिक जानकारी के लिए Using Bundler with Rubygem gemspecs पर एक नज़र डालें।

+0

ठीक है के लिए नहीं, प्लगइन के लिए मणि निर्भरता निर्दिष्ट करने की आवश्यकता देखें। मैंने शायद गलत धारणा से शुरू किया है कि आदेश 'बंडल इंस्टॉल' फ़ोल्डर विक्रेता/प्लगइन्स में देख रहा है और प्लगइन के विकास के समय पर निर्भरताओं को हल करता है। अगर अब समझ में आता है, तो मुझे पहले अपनी प्लगइन का मणि बनाना होगा और मेरी प्लगइन स्थापित होने पर इसकी निर्भरताओं का समाधान किया जाएगा। सही? – Sebtm

0

खुद के लिए संदर्भ।यदि आप एक प्लगइन बना रहे हैं जो RailTie के रूप में Rails के साथ काम करना चाहिए, का उपयोग bundle gem my_plugin के बजाय मणि बनाने के लिए करें। यह आपको (मुझे) बहुत परेशानी बचाता है।

संपादित करें: रेलवे के रूप में काम करने के लिए आपको मणि की आवश्यकता कब होती है? जब भी आप रेल जनरेटर, रेक कार्य जोड़ना चाहते हैं या अपने कोड को रेल ऐप में जोड़ना चाहते हैं (रेल इंजन कहा जाता है)। /संपादित

$ rails plugin new my_plugin 

तो आप अपने रेल app में इसे शामिल path: का उपयोग के रूप में @Sebtm

द्वारा वर्णित

या rubygems करने के लिए इसे जारी करने के लिए निर्भरता

Gem::Specification.new do |s| 
    #... 
    s.add_dependency "rails" 
    s.add_runtime_dependency "heroku" 
    s.add_development_dependency "sqlite3" 
end 

जोड़ें।

$ gem build my_plugin.gemspec 
$ gem push my_plugin-0.7.0.gem #replace version number 
#in Gemfile, as always 
gem 'my_plugin' 

या इसे गीथब पर टैग करें। (उनकी रिहाई UI का उपयोग) और का उपयोग कर

gem 'my_plugin', github: 'accountname/my_plugin', tag: 'v0.7.0' 
+0

यदि आपको रेल के लिए रेलटी के रूप में काम करने की आवश्यकता है। आप उसे कब चाहते हैं? जब भी आप ** रेल जनरेटर **, ** रेक कार्य ** जोड़ना चाहते हैं या अपने कोड को रेल ऐप (कॉल * रेल इंजन *) में जोड़ना चाहते हैं। यदि आपको इनमें से कोई भी आवश्यकता नहीं है, तो 'रेल प्लगइन' का उपयोग न करें। – oma

1

Sebtm के अपने जवाब काफी अच्छा है इस पर निर्भर करती है, लेकिन यह अभी भी टैगो के रूप में काम नहीं किया और वर्णित orangechicken। मैं lib/my_plugin.rb के ऊपरी दाएँ से पहले my_plugin के इंजन लोड किया जाता है पर

require 'your-dependency-gem-name' 

जोड़ने के लिए किया था।

http://guides.rubyonrails.org/engines.html#other-gem-dependencies

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