Ruby on Rails - не гроккинг - PullRequest
       3

Ruby on Rails - не гроккинг

2 голосов
/ 05 августа 2010

В последнее время я многое узнал о веб-технологиях, и я хочу собрать небольшой аккуратный веб-сайт, чтобы поиграть в html, css, javascript, flash и что там у вас.

Я знаю, что в том, что касается веб-браузера, все, что мне нужно сделать, это отправить текстовый файл (обычно HTML) с моего сервера, используя HTTP через TCP.

К настоящему моменту я прошел несколько руководств по Rails, но у меня много проблем с тем, чтобы заставить вещи работать и понять, как работают компоненты, даже если бы я мог заставить их работать, слепо следуя указанным учебникамна письмо.

Мне кажется, я понимаю концепцию MVC.Очевидно, что бизнес-модель приложения имеет смысл хранить отдельно от реализации представления и т. Д. Конечно, это нормально.Из того, что я понимаю, RoR нуждается (?) В базе данных.Конечно, когда мой веб-сайт вырастет до такой степени, что мне нужно будет отслеживать клиентов и обрабатывать данные, я захочу этого.

Но где мне взять реальную функциональность?Где я могу указать, как мой сервер отвечает на запросы браузеров?Разве это не должно быть просто?Нужно ли мне настраивать базу данных только для того, чтобы поднять мою страницу "Привет, мир"?

Я думаю, что может случиться, что Rails предназначен для того, чтобы делать то, что мне не нужно (пока?).Это делает для меня много вещей, которые я не понимаю, и для того, чтобы я чувствовал себя комфортно, мне нужно было покопаться в большом количестве материала, чтобы понять это.

Что привело меня к этому моменту, так это то, что я ищу «следующий шаг» после того небольшого сервера, с которым я играл:

require 'socket'     
server = TCPServer.open(8080)  
loop {
  Thread.start(server.accept) do |client|
    client.puts(Time.now.ctime) # server sends dynamic page consisting of current time
    client.flush
    while (str = client.gets) do 
      puts "recvd >> "+str # show what server gets from client
      if str.chop.length == 0 then break end # detect end of transmission
    end 
    puts "done"
    client.close 
  end
}

Этот небольшой кусочек кода более чем на полпутитам, что мне нужно сделать.Я застрял на чем-то довольно глупом.Я до сих пор не знаю, как просто взять файл на диске и отправить его клиенту.Я полагаю, я бы открыл поток для запрошенного файла и направил его в сокет ... Не знаю, как это сделать в ruby.Так что я подумал, эй, может быть, Rails сделает это за меня.

Теперь я следую кучу указаний, наконец-то запускаю сервер на mongrel и пробую это: ruby script\generate controller MyTest и все равно получаю "Ошибка маршрутизации ", когда я открываю его в браузере.Я получаю гигантский уродливый след стека на cmdline.Винт это!

Очевидно, я должен взять урок, который покажет мне, как использовать Rails и, что более важно, вне зависимости от того, является ли это излишним для моих целей.Итак ... я должен продолжать пытаться понять это?Если так, может кто-нибудь показать мне хороший учебник или объяснить, почему учебники, которые я видел, мне не помогают?

Должен ли я просто использовать EventMachine для создания своего сервера?Я просто хочу сделать хороший простой быстрый веб-сервер.

Спасибо за чтение.:)

Ответы [ 3 ]

5 голосов
/ 05 августа 2010

Вы слишком, слишком обдумываете вещи.Не то чтобы это вообще плохо - это здорово, что вы хотите узнать, как все сходится и работает, но Rails обрабатывает для вас подавляющее большинство подобных вещей.

В целях разработки вы, скорее всего, собираетесьиспользовать Ruby webrick "server", который вы можете запустить из домашнего каталога своих приложений, выполнив: ruby ​​script / server

Теперь, когда вы заходите в свое приложение, которое по умолчанию будет работать на:http://localhost:3000/, этот сервер обработает ваши запросы и вернет HTML для соответствующего просмотра.Если вы создали свое приложение и настроили базу данных, перейдя по указанному выше URL-адресу, вы увидите сообщение «Добро пожаловать на борт» от Rails, сообщающее, что все работает.Позже, когда вы запустите свое приложение в производство, вы будете использовать сервер Apache, но вам не придется беспокоиться о том, что вы упомянули в своем вопросе.

Использование Rails вполне возможнобез базы данных, проверьте config / environment.rb:

# Skip frameworks you're not going to use. To use Rails without a database,
# you must remove the Active Record framework.
# config.frameworks -= [ :active_record, :active_resource, :action_mailer ]

Просто раскомментируйте эту последнюю строку и убедитесь, что вы оставили в ней active_record.

Я думаю, что поможет вам лучше всегоПреодолеть путаницу - изучить, как работает маршрутизация Rails, которая контролируется файлом config / rout.rb.Я думаю, что это поможет вам понять, как Rails принимает и реагирует на входящие запросы.

И Rails на самом деле идеально подходит для создания небольших веб-сайтов с песочницей, с которыми можно поиграться - как только вы преодолеете начальную кривую обучения, вы можете получить все необходимоеи работает очень быстро.

3 голосов
/ 05 августа 2010

Ваш сервер времени в Rails:

# app/controllers/time_controller.rb
# after ./script/server, available at:
# http://localhost:3000/time/
class TimeController < ApplicationController
  def index
    render :text => Time.now.ctime
  end
end

База данных не нужна.(Вам нужно удалить ActiveRecord из стека фреймворков, как показывает Захари в своем ответе).

1 голос
/ 05 августа 2010

Rails не подходит для этого. Возможно, вам лучше использовать apache для статического файлового сервера. Или вы можете переписать ваш сокет-сервер так:

require 'socket'
server = TCPServer.open(8080)  
loop {
  Thread.start(server.accept) do |client|
    client.puts(Time.now.ctime) # server sends dynamic page consisting of current time
    client.flush
    while (str = client.gets) do 
      puts "recvd >> "+str # show what server gets from client
      if str.chop.length == 0
        client.write File.read(the_file_to_send)
        break
      end
    end 
    puts "done"
    client.close 
  end
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...