সিনাত্রার সাথে স্থির ফাইল পরিবেশন করা হচ্ছে


139

আমার একটি পৃষ্ঠার ওয়েবসাইট রয়েছে কেবলমাত্র এইচটিএমএল, সিএসএস এবং জাভাস্ক্রিপ্ট ব্যবহার করে। আমি অ্যাপটিকে হিরোকুতে স্থাপন করতে চাই, তবে আমি এটি করার কোনও উপায় খুঁজে পাচ্ছি না। আমি এখন অ্যাপটি সিনাত্রার সাথে কাজ করার চেষ্টা করছি।

.
|-- application.css
|-- application.js
|-- index.html
|-- jquery.js
`-- myapp.rb

এবং নীচের বিষয়বস্তু হয় myapp.rb

require 'rubygems'
require 'sinatra'

get "/" do
  # What should I write here to point to the `index.html`
end

1
আমি শিখেছি লোকালহোস্ট অ্যাক্সেস করা : 2345 / সূচক html কাজ করে।
টি।

আপনি কয়েকটি লাইনে স্থিতিশীল ফাইল পরিবেশন করতে ওয়েব ব্রিক ব্যবহার করতে পারেন। require 'webrick'; server = WEBrick::HTTPServer.new Port: 1234; server.mount '/', WEBrick::HTTPServlet::FileHandler, 'www/'; trap("INT") { server.stop }; server.start;তারপরে দৌড়াও ruby myapp.rb। হেরোকুর জন্য বন্দরটি সরান। আপনার web: ruby myapp.rbমধ্যে রাখুন Procfile। মন্তব্যটি উত্তর নয় কারণ এটি সিনট্রা নয়, তবে আমি মনে করি এটি নির্ভরতা সহজ করে তোলে।
ক্লো

উত্তর:


131

কোনও অতিরিক্ত কনফিগারেশন ছাড়াই সিনাত্রা সম্পদের পরিবেশন করবে public। খালি রুটের জন্য, আপনি সূচী নথিটি রেন্ডার করতে চান want

require 'rubygems'
require 'sinatra'

get '/' do
  File.read(File.join('public', 'index.html'))
end

রুটগুলিতে এমন একটি ফিরতে হবে Stringযা HTTP প্রতিক্রিয়া সংস্থায় পরিণত হয়। File.readএকটি ফাইল খোলে, ফাইলটি পড়ে, ফাইলটি বন্ধ করে দেয় এবং একটি প্রদান করে String


52
আপনার বরং করা উচিত send_file File.expand_path('index.html', settings.public)
কনস্ট্যান্টিন হায়েস

32
এটি এখন ভুল। আপনি প্রতিস্থাপন করা উচিত settings.publicসঙ্গে settings.public_folderপেতেsend_file File.expand_path('index.html', settings.public_folder)
অ্যালিস্টার মধ্যে Holt

2
@zhirzh send_file, এটা করার জন্য আপনাকে অতিরিক্ত স্টাফ আছে github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L351
আয়ান

1
File.readপুরো ফাইলটি মেমরিতে পড়ে। এটি ফাইলের আকার এবং সমবর্তী অনুরোধের সংখ্যার উপর নির্ভর করে ঠিক আছে বা নাও হতে পারে।
ওয়েন কনরাড

@WayneConrad বিপরীতে, সেন্ড_ফাইল ঠিক আছে? বা এটি একই কাজ করে?
বেন

169

আপনি send_fileফাইল পরিবেশন করতে সহায়ক ব্যবহার করতে পারেন ।

require 'sinatra'

get '/' do
  send_file File.join(settings.public_folder, 'index.html')
end

index.htmlআপনার অ্যাপ্লিকেশনটির স্ট্যাটিক ফাইল থাকার জন্য যা যা ডিরেক্টরি কনফিগার করা হয়েছে তা থেকে এটি পরিবেশন করবে ।


19
আমার মনে হয় নতুন সিনেট্রা অ্যাপ্লিকেশনগুলি ব্যবহার করুন set :public_folder, সুতরাং আপনি এর settings.public_folderপরিবর্তে ব্যবহার করবেনsettings.public
এন্ড্রু

4
আমি সেটিংস.পলিটিক্যাল_ফোল্ডার ব্যবহারের উত্তর আপডেট করেছি। পুরানো অ্যাপ্লিকেশনগুলিতে এখনও সেটিংস.পাবলিক ব্যবহারের প্রয়োজন হতে পারে।
চাদ ডিশন

62

আপনি কেবল সর্বজনীন ফোল্ডার থেকে তাদের হোস্ট করতে পারেন এবং তাদের রুটের প্রয়োজন নেই।

.
-- myapp.rb
`-- public
    |-- application.css
    |-- application.js
    |-- index.html
    `-- jquery.js

Myapp.rb এ

set :public_folder, 'public'

get "/" do
  redirect '/index.html'
end

জনসাধারণের কয়েকটি উপ ফোল্ডারে লিঙ্ক

set :public_folder, 'public'
get "/" do
  redirect '/subfolder/index.html' 
end

। / প্রজাতন্ত্রের সমস্ত কিছু '/w whil/bla.html থেকে অ্যাক্সেসযোগ্য

উদাহরণ:
./public/stylesheets/screen.css
'/stylesheets/screen.css' এর মাধ্যমে অ্যাক্সেসযোগ্য হবে না কোনও রুটের প্রয়োজন নেই


1
যদি জনসাধারণের কাছে অনেকগুলি নেস্টেড ফোল্ডার থাকে (যার জন্য আপনি রুটগুলি তৈরি করতে চান না) যার সূচক html ফাইল রয়েছে আপনি ডিফল্ট হতে চান?
ডেরেক

আমি সমাধানটি প্রসারিত করেছি। আমি আশা করি এটি স্পষ্ট করতে সহায়তা করে, সর্বজনীনভাবে অ্যাক্সেসযোগ্য, কোনও রুটের প্রয়োজন নেই পাথের 'পাবলিক' অংশটি বাদ দিতে।
মরগান

1
হিরোকুতে র্যাকআপ ব্যবহার করে আমাকে ব্যবহার করতে হয়েছিল set :public_folder, 'public'। এটি কাজ করার মূল বিষয়টি ছিল, সিনেট্রা নথিপত্র সত্ত্বেও এটি ইতিমধ্যে ডিফল্ট হিসাবে সেট করা ছিল।
ড্যানিয়েল সি

12

মনে রাখবেন যে উত্পাদনে আপনার ওয়েব সার্ভারটি index.htmlস্বয়ংক্রিয়ভাবে প্রেরণ করতে পারে যাতে অনুরোধটি সিনাত্রার কাছে না আসে। এটি পারফরম্যান্সের জন্য ভাল কারণ আপনাকে কেবল স্ট্যাটিক পাঠ্য পরিবেশন করতে সিনেট্রা / র্যাক স্ট্যাকের মধ্য দিয়ে যেতে হবে না, এটি যা অ্যাপাচি / এনগিনেক্স করায় দুর্দান্ত।


ওহ হ্যাঁ, দুহ। আমি তখন কেবল এরব ব্যবহার করব এবং এটি নগদ করার জন্য বার্নিশ ব্যবহার করব।
ma11 শেই 28

2
আপনি কীভাবে এটির উত্পাদন কনফিগার করবেন? আমি সিনাট্রা এবং র্যাকের সাথে এই ক্রস রেফারেন্সিং সম্পর্কে ডকুমেন্টেশন অনুসন্ধান করেছি কিন্তু এটি খুঁজে পাচ্ছি না। মূলত আমি চাই যে

12

সিনাট্রা আপনাকে ডকুমেন্টে বর্ণিত হিসাবে পাবলিক ডিরেক্টরি থেকে স্ট্যাটিক ফাইলগুলি পরিবেশন করা উচিত :

স্ট্যাটিক ফাইল

স্ট্যাটিক ফাইলগুলি। / প্রজাতন্ত্র ডিরেক্টরি থেকে পরিবেশন করা হয়। আপনি পাবলিক বিকল্পটি সেট করে একটি আলাদা অবস্থান নির্দিষ্ট করতে পারেন:

মনে রাখবেন যে সর্বজনীন ডিরেক্টরি নামটি ইউআরএলটিতে অন্তর্ভুক্ত নেই। একটি ফাইল ./public/css/style.css উদাহরণ.com/css/style.css হিসাবে উপলব্ধ করা হয়েছে।


4
এর 4 টি ভোট কেন? কোনও ফোল্ডারের অনুরোধ করা হলে ডিফল্ট নথি কীভাবে উপস্থাপন করা যায় তার প্রশ্নের উত্তর দেয় না।
ডেরেক প্রিয়ার


2

Sinatra-assetpack মণি বৈশিষ্ট্য আভা উপলব্ধ করা হয়। বাক্য গঠন মিষ্টি:

serve '/js', from: '/app/javascripts'

যদিও এখনও আমি রেলের সম্পদ পাইপলাইনে সমস্যা নিয়ে এসেছি তখন আমার মনে হয় সিনেট্রা-অ্যাসেটপ্যাক ব্যবহার করে আমার আরও অনেক বেশি নিয়ন্ত্রণ রয়েছে - তবে বেশিরভাগ সময় এটি কেবল কয়েকটি লাইন কোডের সাথে কাজ করে।


2

উত্তর উত্তর : আমি উপরের সবগুলি সিএসএস, জেএস .... ইত্যাদি লোড করার অবিচ্ছিন্ন হওয়ার ভাগ্য ছাড়াই বেঁধে রাখি যা কেবলমাত্র ইন্ডেক্সের এইচটিএমটিএল লোড হচ্ছে ... এবং বাকীগুলি চলছে >> >>404 error

আমার সমাধান: অ্যাপ ফোল্ডারটি দেখতে এমন দেখাচ্ছে looks

index.rb == >> সিনেট্রা কোড যায়।

require 'rubygems'
require 'sinatra'

get '/' do
  html :index
end

def html(view)
  File.read(File.join('public', "#{view.to_s}.html"))
end

public folder== >> এর মধ্যে সমস্ত কিছু রয়েছে ... সিএসএস, জেএস, ব্লা ব্লহ..এইটিসি।

user@user-SVE1411EGXB:~/sintra1$ ls
index.rb  public
user@user-SVE1411EGXB:~/sintra1$ find public/
public/
public/index.html
public/about_us.html
public/contact.html
public/fonts
public/fonts/fontawesome-webfont.svg
public/fonts/fontawesome-webfont.ttf
public/img
public/img/drink_ZIDO.jpg
public/js
public/js/bootstrap.min.js
public/js/jquery.min.js
public/js/bootstrap.js
public/carsoul2.html
public/css
public/css/font-awesome-ie7.css
public/css/bootstrap.min.css
public/css/font-awesome.min.css
public/css/bootstrap.css
public/css/font-awesome.css
public/css/style.css
user@user-SVE1411EGXB:~/sintra1$

এখন সার্ভারটি শুরু করুন এবং আপনি কোনও সমস্যা ছাড়াই স্থির পৃষ্ঠাগুলিতে নেভিগেট করতে সক্ষম হবেন।

user@user-SVE1411EGXB:~/sintra1$ ruby index.rb 
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on localhost:4567, CTRL+C to stop

2
require 'rubygems'
require 'sinatra'

set :public_folder, File.dirname(__FILE__) + '/../client'
#client - it's folder with all your file, including myapp.rb

get "/" do
  File.read('index.html')
end


1

আপনি index.htmlফাইলটি সরানো views/index.erbএবং এন্ডোয়েন্ট পয়েন্টের মতো সংজ্ঞা দিতে পারেন:

get '/' do
  erb :index
end

1

আপনি সর্বদা র্যাক :: স্ট্যাটিক ব্যবহার করতে পারেন

https://www.rubydoc.info/gems/rack/Rack/Static

'Config.ru' এ 'রান' কমান্ডের আগে এই লাইনটি যুক্ত করুন

use Rack::Static, :urls => [""], :root => 'public', :index => 'index.html'

0

publicফোল্ডারে ফাইল রাখার একটি সীমাবদ্ধতা রয়েছে। প্রকৃতপক্ষে, আপনি যখন মূল '/'পথে আছেন সঠিকভাবে কাজ করছে কারণ ব্রাউজারটি উদাহরণস্বরূপ আপনার সিএসএস ফাইলের আপেক্ষিক পথটি সেট করবে /css/style.cssএবং সিনায়াত্রা publicডিরেক্টরিটিতে ফাইলটি সন্ধান করবে । তবে, যদি আপনার অবস্থান উদাহরণস্বরূপ হয় /user/create, তবে ওয়েব ব্রাউজারটি আপনার সিএসএস ফাইল সন্ধান /user/create/css/style.cssকরবে এবং ব্যর্থ হবে।

কার্যকারণ হিসাবে, আমি সিএসএস ফাইলটি সঠিকভাবে লোড করতে নিম্নলিখিত পুনঃনির্দেশটি যুক্ত করেছি:

get %r{.*/css/style.css} do
    redirect('css/style.css')
end

-7

এই সমাধান সম্পর্কে কি? :

get "/subdirectory/:file" do 
  file = params[:file] + "index.html"
  if File.exists?(params[:file])
    return File.open("subdirectory/" + file)
  else
   return "error"
  end
end

সুতরাং আপনি যদি এখন (উদাহরণস্বরূপ) / উপ-ডিরেক্টরি / পরীক্ষা / এ নেভিগেট করেন তবে এটি সাব-ডাইরেক্টরি / পরীক্ষা / সূচক html লোড করবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.