मैं एक पुस्तकालय लिख रहा हूं जिसमें थोर के माध्यम से एक एम्बेडेड सिनात्रा ऐप लॉन्च किया गया है। मैं Sprockets::Environment
/css
और /js
पर उदाहरणों को माउंट करना चाहता हूं और मुख्य ऐप /
पर मैप किया गया है। यह का उपयोग config.ru
फ़ाइल में आसान होगा, लेकिन इस मामले में ऐसा कोई नहीं है क्योंकि मैं Sinatra::Application.run!
के साथ प्रोग्रामैटिक रूप से सिनात्रा ऐप शुरू कर रहा हूं। इसे कैसे प्राप्त किया जा सकता है?मैं रैंकअप फ़ाइल के बिना सिनात्रा के साथ स्प्राकेट्स का उपयोग कैसे करूं?
उत्तर
मैंने Rack::URLMap
से कुछ कार्यक्षमताओं के साथ एक कस्टम मिडलवेयर लिखकर इसे समाप्त कर दिया। यह इस तरह मोटे तौर पर दिखता है:
require "sprockets"
require "sinatra/base"
class SprocketsMiddleware
attr_reader :app, :prefix, :sprockets
def initialize(app, prefix)
@app = app
@prefix = prefix
@sprockets = Sprockets::Environment.new
yield sprockets if block_given?
end
def call(env)
path_info = env["PATH_INFO"]
if path_info =~ prefix
env["PATH_INFO"].sub!(prefix, "")
sprockets.call(env)
else
app.call(env)
end
ensure
env["PATH_INFO"] = path_info
end
end
class App < Sinatra::Base
use SprocketsMiddleware, %r{/assets} do |env|
env.append_path "assets/css"
env.append_path "assets/js"
end
end
App.run!
दरअसल, यह मुश्किल नहीं है। तुम सब करने की ज़रूरत है एक सिनात्रा विन्यास चर के लिए Sprockets::Environment
का एक उदाहरण आवंटित किया जाता है और संपत्ति में आपकी रुचि है को देखने के लिए कुछ पथ को परिभाषित
यहाँ एक बुनियादी उदाहरण है:।
require "sass"
require "haml"
require "erubis"
require "sinatra"
require "sprockets"
set :assets, Sprockets::Environment.new
# Configure sprockets
settings.assets.append_path "app/javascripts"
settings.assets.append_path "app/stylesheets"
# For compressed JS and CSS output
require "yui/compressor"
settings.assets.js_compressor = YUI::JavaScriptCompressor.new
settings.assets.css_compressor = YUI::CssCompressor.new
get "/" do
haml :index
end
get "/javascripts/:file.js" do
content_type "application/javascript"
settings.assets["#{params[:file]}.js"]
end
get "/stylesheets/:file.css" do
content_type "text/css"
settings.assets["#{params[:file]}.css"]
end
मुबारक sprocketing!
यहाँ कैसे मैं रेल की तरह निर्देशिका लेआउट, सहायकों और जे एस और सीएसएस के लिए minification साथ सिनात्रा में एकीकृत Sprockets है।
मैंने सिनात्रा एक्सटेंशन लिखना चुना। यह एक्सटेंशन स्पॉकेट्स (पथ, न्यूनीकरण, सहायक) की कॉन्फ़िगरेशन को समाहित करता है और एप्लिकेशन द्वारा पंजीकृत किया जा सकता है।
module Sinatra
module Assets
extend Sinatra::Extension
configure do
set :assets, Sprockets::Environment.new(root).tap { |assets|
%w(assets vendor/assets).each do |base|
%w(images javascripts stylesheets).each do |type|
assets.append_path File.join(base, type)
end
end
if production?
assets.js_compressor = Closure::Compiler.new
assets.css_compressor = YUI::CssCompressor.new
uid = Digest::MD5.hexdigest(File.dirname(__FILE__))[0,8]
assets.cache = Sprockets::Cache::FileStore.new("/tmp/sinatra-#{uid}")
else
assets.cache = nil
end
}
end
get "/assets/*" do
env["PATH_INFO"].sub!(%r{^/assets}, "")
expires Time.now + (365*24*60*60) if settings.production?
settings.assets.call(env)
end
helpers do
include Sprockets::Helpers
Sprockets::Helpers.configure do |config|
config.expand = development?
config.digest = production?
end
def assets_environment
settings.assets
end
end
end
end
अपने आवेदन में एक्सटेंशन का उपयोग करना आसान है:
class App < Sinatra::Base
register Sinatra::Assets
# ...
end
आस्तियों assets
, या vendor/assets
में रखा जा सकता है। उदाहरण के लिए vendor/assets/jquery.js
को तार्किक नाम से संदर्भित किया जा सकता है, यानी http://localhost/assets/jquery.js
।
उपर्युक्त उदाहरण में मैं sprockets-helpers का उपयोग कर रहा हूं जो javascript_tag
जैसे सहायक प्रदान करता है। उपर्युक्त कॉन्फ़िगरेशन मानता है कि विकास में, आप संदर्भित संपत्ति द्वारा आवश्यक संपत्तियों का विस्तार करना चाहते हैं (जिसके परिणामस्वरूप प्रति संपत्ति एकाधिक टैग)।
- 1. मैं सिनात्रा के साथ अपने विचारों के लिए फ़ाइल एक्सटेंशन के रूप में .html.erb का उपयोग कैसे करूं?
- 2. मैं ffmpeg के साथ पाइपिंग का उपयोग कैसे करूं?
- 3. मैं विजुअल स्टूडियो के बिना एमएसटीएस्ट का उपयोग कैसे करूं?
- 4. मैं jaxb.index फ़ाइल का उपयोग कैसे करूं?
- 5. मैं कैबल-देव के साथ रनहास्केल का उपयोग कैसे करूं?
- 6. रूबी के साथ सिनात्रा में gzip संपीड़न का उपयोग
- 7. सिनात्रा के साथ स्लेश के साथ पैरा का उपयोग कैसे करें?
- 8. सिनात्रा के साथ देवता
- 9. एक्सएमएल दस्तावेज़ों की सेवा के लिए मैं सिनात्रा का उपयोग कैसे करूं?
- 10. रैक का उपयोग :: सत्र :: सिनात्रा के साथ पूल
- 11. मैं प्रतीक का उपयोग करके सिनात्रा पैराम्स का उपयोग कैसे करूं?
- 12. मैं विरासत के साथ संरचना का उपयोग कैसे करूं?
- 13. मैं WinSock के साथ OpenSSL का उपयोग कैसे करूं?
- 14. मैं स्प्रिंग एमवीसी के साथ धूमकेतु का उपयोग कैसे करूं?
- 15. मैं अपाचे आईवी के साथ टेस्टएनजी का उपयोग कैसे करूं?
- 16. मैं ज़ेंड फ्रेमवर्क के साथ नेमस्पेस का उपयोग कैसे करूं?
- 17. मैं साइथन के साथ स्फिंक्स का उपयोग कैसे करूं?
- 18. मैं System.IO.MemoryStream के साथ GZipStream का उपयोग कैसे करूं?
- 19. मैं ज़ेंड फ्रेमवर्क के साथ PHPUnit का उपयोग कैसे करूं?
- 20. मैं ईजेएस के साथ req.flash() का उपयोग कैसे करूं?
- 21. मैं रूबी के साथ सेलेनियम का उपयोग कैसे करूं?
- 22. मैं पाइथन के साथ SQL पैरामीटर का उपयोग कैसे करूं?
- 23. मैं एकाधिक पैरामीटर के साथ VaryByParam का उपयोग कैसे करूं?
- 24. COM ऑटोमेशन का उपयोग किए बिना वर्ड डॉक्यूमेंट्स के साथ मैं कैसे काम करूं?
- 25. मैं डीजेगो के बाकी हिस्सों के बिना Django टेम्पलेट्स का उपयोग कैसे करूं?
- 26. मैं SQL आदेशों के साथ फ़ाइल कैसे आयात करूं?
- 27. रैक का उपयोग करें :: सिनात्रा
- 28. मैं सी # के साथ एक HTML फ़ाइल कैसे मान्य करूं?
- 29. सिनात्रा का उपयोग करते समय मैं एक मणि से रेक कार्यों को कैसे आयात करूं?
- 30. मैं सिनात्रा
इसके लिए धन्यवाद - बिल्कुल वही जो मैं खोज रहा था। – theTRON
मदद करने के लिए हमेशा खुश! –
यह, मैंने देखा है कि सभी sinatra-sprockets उदाहरणों की तरह, काम नहीं करता (या, अब काम नहीं करता)। क्या स्पॉकेट में कुछ बदल गया है? – Ian