2011-02-16 6 views
7

मैं एक रेल 3 इंजन अनुप्रयोग विकसित कर रहा हूं, और मैं विचारों के लिए हैमल का उपयोग करना चाहता हूं।रेल 3 इंजन पर हैमल की आवश्यकता के लिए सबसे अच्छा तरीका

सबसे पहले, क्या मैंने किया है इंजन Gemfile में जोड़ने के लिए किया गया था:

gem "haml" 

जबकि मैं अपने इंजन का परीक्षण किया गया था, यह ठीक काम कर रहा था (मैं https://github.com/josevalim/enginex का इस्तेमाल किया है मणि पैदा करते हैं और यह परीक्षण के साथ करने के लिए डमी आवेदन)।

मेरी समस्या तब शुरू हुई जब मैंने वास्तविक रेल एप्लिकेशन पर इंजन का उपयोग करने का प्रयास किया। एप्लिकेशन में अपने स्वयं के जेमफाइल पर मणि "हैमल" नहीं है, और इसलिए यह हैमल शुरू नहीं कर रहा था, इसलिए मुझे टेम्पलेट प्राप्त नहीं हुआ क्योंकि त्रुटियों को नहीं मिला क्योंकि यह .haml विचारों की तलाश नहीं कर रहा था। मैं सोच रहा था कि इंजन पर हैमल की आवश्यकता के जरिए इसे रेल आवेदन द्वारा भी जरूरी माना जाएगा।

मैं अब के लिए क्या किया इस कोड के साथ इंजन पर एक config/initializers/haml.rb जोड़ने के लिए किया गया था:

require 'haml' 
Haml.init_rails(binding) 

अब यह काम कर रहा है, लेकिन अगर यह वास्तव में एक अच्छा है मैं सोच रहा हूँ ऐसा करने का तरीका रेल क्यों हैमल "init.rb" फ़ाइल को कॉल नहीं कर रहे हैं और इसलिए इंजन जेमफाइल को केवल "मम" जोड़कर हैम सही ढंग से शुरू कर रहे हैं?

उत्तर

6

मुझे लगता है कि आपको लक्ष्य एप्लिकेशन में हैमल इंस्टॉल करने के लिए बंडलर के लिए इंजन रत्नपेक में निर्भरता के रूप में हैम करना होगा (और इसके Gemfile.lock में दिखाया जाएगा)। कुछ ऐसा:

Gem::Specification.new do |s| 
    s.add_dependency(%q<haml>, [">= 0"]) 
end 

मैंने अभी अपने इंजनों में से एक पर इसका परीक्षण किया। .gemspec में निर्भरता के बिना यह लक्ष्य ऐप में हैमल स्थापित नहीं किया था (Gemfile.lock में दिखाई नहीं दिया था)। बाद मैं एक निर्भरता के रूप में gemspec को haml जोड़ा हो, तो दिखाई देती है:

PATH 
    remote: /rails_plugins/mine/my_engine 
    specs: 
    my_engine (0.0.0) 
     formtastic 
     haml 
     inherited_resources 
     settingslogic 
     sqlite3-ruby 

GEM 
    remote: http://rubygems.org/ 
    specs: 
    #................ 
    haml (3.0.25) 
    #................ 

आप जौहरी का उपयोग कर रहे हैं, तो यह स्वचालित रूप से gemspec क्या .. आपके Gemfile में है तो यह और भी जोड़ता के आधार पर करने के लिए निर्भरता जोड़ देगा यदि आपके समूह में आपके Gemfile में परिभाषित समूह है तो एक developement_dependency। मैंने केवल इंजन को संक्षेप में देखा है, इसलिए मुझे नहीं पता कि इसमें gemspec बनाने के लिए एक समान रेक कार्य है या नहीं।

यह मदद कर सकता है कुछ चीजों को स्पष्ट:

http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

+4

इससे मदद मिली। यह भी सुनिश्चित करना आवश्यक था कि इंजन में कहीं "आवश्यकता" हैमल शामिल करें। – higginbotham

+0

हाँ, मुझे लगता है कि मैंने इसे छोड़ दिया। मैं आमतौर पर इसे मुख्य रूबी फ़ाइल में जोड़ता हूं। My_plugin के लिए, यह my_plugin/lib/my_plugin.rb – johnmcaliley

19

दो बातें जरूरी हैं। सबसे पहले, .gemspec में:

s.add_dependency 'haml', ['>= 3.0.0'] 

और अपने lib/gem_name.rb में:

require 'haml' 

और फिर मणि और एप्लिकेशन निर्देशिका के अंदर bundle दोनों चलाते हैं।

+0

के शीर्ष पर जाएगा, मुझे एहसास है कि आपने मूल प्रश्न के बाद कई महीनों का उत्तर दिया है, लेकिन "रेल इंजन के विभिन्न क्रमपरिवर्तनों के लिए चारों ओर घूमना हैमल नहीं देख सकता" मैं नहीं कर सका पता करें कि मैं क्या गलत कर रहा था। मुझे बस इतना था कि 'हम्ल' टुकड़ा की आवश्यकता होती है, जिसे मैंने सोचा था कि यह स्वचालित रूप से करेगा क्योंकि मेरा रत्नपेक निर्भरता में 'हैमल-रेल' का उपयोग कर रहा है। इसके लिए बहुत धन्यवाद! – nzifnab

+0

क्या मैं सुझाव दे सकता हूं कि आप 'my_engine/application_controller.rb' की आवश्यकताएं जोड़ें, क्योंकि इसका उपयोग किया जाता है। – Kris

+0

@ क्रिस नहीं सभी मणि इंजनों में 'एप्लिकेशन कंट्रोलर' है, इसलिए मुझे यकीन नहीं है कि आपको इसकी क्या आवश्यकता होगी। –

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