Подтвердить что ты не робот

Как запустить простой ruby ​​script на любом веб-сервере (Apache или Mongrel или что-то еще)

Мне кажется очень смешно, что, когда я ищу что-то связанное с рубином, все рубины на рельсах связаны с результатами. Так никто больше не использует сырой рубин?

Однако я новичок в рубине. Сегодня утром я просто пытался запустить простой мир рубинов script на веб-сервере, сначала apache 2, а затем попробовал дворняжку. Но, к сожалению, я провалился. Я googled каждый путь, я могу, но результат показывает только рубин на рельсах. Так что действительно есть способ запустить ruby ​​script на любом веб-сервере, или мне нужно использовать ror, даже если я просто хочу сделать приветственное приложение мира?

4b9b3361

Ответ 1

Sinatra, вероятно, лучше всего подходит для запуска Ruby script с веб-сервера без Rails.

Посмотрите здесь: http://www.sinatrarb.com

Из документов Sinatra:

require 'sinatra'

get '/hi' do
  "Hello World!"
end

Затем просто запустите:

$ gem install sinatra
$ ruby -rubygems hi.rb
== Sinatra has taken the stage ...
>> Listening on 0.0.0.0:4567

Просто перейдите в http://0.0.0.0:4567 в свой браузер, и вы должны найти свой "Hello World"

...

Чтобы добавить к этому, так как вы также спрашиваете о запуске в Apache или других веб-серверах, вы можете проверить эти руководства о развертывании вашего нового приложения на основе Sinatra в Apache или Nginx:

Apache: http://www.pastbedti.me/2009/11/deploying-a-sinatra-app-with-apache-and-phusion-passenger-a-k-a-mod_rack/ и http://www.giantflyingsaucer.com/blog/?p=1716

Nginx: http://tommy.chheng.com/2009/06/09/deploying-a-sinatra-app-on-nginx-passenger-with-capistrano-and-git/

Обратите внимание, что оба учебника охватывают запуск Sinatra через Passenger (http://www.modrails.com/ - не откладывайте имя "modrails":)), с которым мне повезло в развертывании приложений под Apache и Nginx.

Ответ 2

Вы можете настроить Apache (например) для запуска файлов .rb как скрипты CGI, а затем добавить строку shebang (#!/path/to/your/ruby или, возможно, #!/usr/bin/env ruby) вверху script. Однако это не оптимально, так как он запускает новый интерпретатор для каждого запроса.

Ответ 3

Чаще всего используется рубиновый веб-сайт: http://www.modrails.com/ Это не очень сложно установить, и вы используете, вот он doc для apache: http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_a_ruby_on_rails_application

Ваше приложение должно быть действительным приложением стойки, вот минимальный мир привет (скажем,/app - ваша корневая папка вашего приложения):

/app/config.ru

require 'rack'
require 'app'
run(app)

/app/app.rb

app = proc do |env|
  [
    # http status code
    200,
    # headers
    {'Content-Type' => 'text/html'},
    # html body
    ["<head><title>Test Page</title></head><body>Hello World !</body>"]
  ]
end

Сохраните вышеприведенные файлы и создайте вложенную папку/приложение/публикацию (требуемую пассажиром для обнаружения приложения ruby ​​/rails/sinatra) и используйте /app/public как DocumentRoot в вашей конфигурации apache.

Это может показаться страшным, но это для производственного развертывания, в разработке вы действительно не хотите общаться с реальным сервером.

Все, что вам нужно для запуска файла config.ru, который я дал выше, это:

$ gem install rack
$ rackup config.ru

Или, если вы хотите быть ближе к своей производственной системе:

$ gem install passenger
$ cd /app
$ passenger start

который установит вам сервер nginx с пассажиром и запустит ваше приложение.

В большинстве случаев вы никогда не будете использовать стойку напрямую, а вместо этого используйте ruby ​​on rails, sinatra или другую фреймворк, чтобы сгенерировать html для вас (теперь они используют стойку ниже, чтобы обеспечить общий api с веб-серверами).

Ответ 5

Я слышал, что mod_ruby - это хорошо. В отличие от #!/path/to/your/ruby, mod_ruby не будет порождать нового интерпретатора ruby.

https://github.com/shugo/mod_ruby

Ответ 6

Запустите это из корня приложения.

ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"

Ответ 7

#!/usr/bin/env ruby  //shebang line to indicate path to ruby.
require 'cgi'       //cgi file to create a simple cgi object.
cgi = CGI.new      //instantiating a cgi object. 
puts cgi.header   //thats telling the server about the type(html).
puts "hello"      // thats the output on the browser.