Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

Ruby on Rails - это просто?

Отвечу со всей определенностью - да, просто... особенно в линуксе. Установка Ruby on Rails под виндой мне, помнится, дико не понравилась: долго, нудно и хлопотно.

Ruby on Rails
Ruby on Rails

А вот в linux... скажем, в Fedora 24 мне понадобилась следующая несложная последовательность действий, потребовавших совсем немного времени; возможна инсталляция Ruby on Rails from RubyGems.org:

 

$ sudo dnf group install "C Development Tools and Libraries"
$ sudo dnf install ruby-devel libxml2-devel
$ gem install rails

 

так и из официальных репозиториев Fedora:

 

$ sudo dnf install rubygem-{rails,sqlite3,coffee-rails,sass-rails,uglifier,jquery-rails,turbolinks,jbuilder,sdoc,spring,byebug,web-console} nodejs

 

 

Что дальше? - а дальше еще проще. Заходим в каталог, предназначенный нами для работы; например, это rails; после чего:

 

$ rails new demo
$ cd demo
$ rails server

 

Ну и вот; запустив web-сервер и перейдя в каталог demo, многочисленное содержимое которого можно теперь тщательно и не торопясь рассмотреть - начинаем думать, что бы такое для начала общественно-полезное с вами сделать? - я предлагаю быстрехонько сваять на рельсах погодный информер, вытаскивающий для заданной геолокации погоду с World Weather Online, благо про работу с API World Weather Online уже немало рассказывалось на страницах этого блога, и повторяться не придется... итак - нам осталось, по сути, создать лишь соответствующий контроллер и имя действия, предназначенного для поддержки этого самого контроллера (пусть будет, например, актуальное состояние погоды для Питера):

 

$ rails generate controller Informer spb

 

Рабочий пример описанного в статье кода, в числе других Rails Examples - всегда возможно найти в тестовом блоге автора на herokuapp.com, welcome.

 

Сделали? - да, это было очень недолго и несложно. И вот теперь - открываем файл spb.html.erb , который приводим к следующему (например) виду:

 demo/app/views/informer/spb.html.erb

<h2>St.Petersburg weather</h2>

<div style="float:left; width:30%; height:auto">
    <%=image_tag @data.css("current_condition").css("weatherIconUrl").text %>
</div>
<table width="30%">

    <tr>
        <th>Coordinates</th>
        <td>
            <%=@data.css("query").text %>
        </td>
    </tr>
    <tr>
        <th>Temperature Celsius</th>
        <td>
            <%=@data.css("current_condition").css("temp_C").text %> &deg; C</td>
    </tr>
    <tr>
        <th>Temperature Farenheit</th>
        <td>
            <%=@data.css("current_condition").css("temp_F").text %> F</td>
    </tr>
    <tr>
        <th>Description</th>
        <td>
            <%=@data.css("current_condition").css("weatherDesc").text %>
        </td>
    </tr>
    <tr>
        <th>Wind speed Miles</th>
        <td>
            <%=@data.css("current_condition").css("windspeedMiles").text %>
        </td>
    </tr>
    <tr>
        <th>Wind speed Kmph</th>
        <td>
            <%=@data.css("current_condition").css("windspeedKmph").text %>
        </td>
    </tr>
    <tr>
        <th>Wind direction Degree</th>
        <td>
            <%=@data.css("current_condition").css("winddirDegree").text %>
        </td>
    </tr>
    <tr>
        <th>Wind direction 16 Point</th>
        <td>
            <%=@data.css("current_condition").css("winddir16Point").text %>
        </td>
    </tr>
    <tr>
        <th>precip MM</th>
        <td>
            <%=@data.css("current_condition").css("precipMM").text %>
        </td>
    </tr>
    <tr>
        <th>Humidity</th>
        <td>
            <%=@data.css("current_condition").css("humidity").text %>
        </td>
    </tr>
    <tr>
        <th>Visibility</th>
        <td>
            <%=@data.css("current_condition").css("visibility").text %>
        </td>
    </tr>
    <tr>
        <th>Pressure</th>
        <td>
            <%=@data.css("current_condition").css("pressure").text %>
        </td>
    </tr>
    <tr>
        <th>cloud cover</th>
        <td>
            <%=@data.css("current_condition").css("cloudcover").text %>
        </td>
    </tr>
    <tr>
        <th>Feels Like C</th>
        <td>
            <%=@data.css("current_condition").css("FeelsLikeC").text %>
        </td>
    </tr>
    <tr>
        <th>Feels Like F</th>
        <td>
            <%=@data.css("current_condition").css("FeelsLikeF").text %>
        </td>
    </tr>
</table>

<% @data.css("weather").each do |oldw| %>
    <h3><%= oldw.css("date").text %></h3>

    <table>
        <tr>
            <th>Maximum Temperature Celsius</th>
            <td>
                <%=oldw.css("maxtempC").text %> C</td>
        </tr>
        <tr>
            <th>Minimum Temperature Celsius</th>
            <td>
                <%=oldw.css("mintempC").text %> C</td>
        </tr>
    </table>
    <% end %>

 

Редактируем контроллер (указываем широту и долготу Санкт-Петербурга, 59.94, 30.31, также ваш Premium API KEY WorldWeatherOnline):

demo/app/controllers/informer_controller.rb

class InformerController < ApplicationController
def spb
require 'nokogiri'
url = "http://api.worldweatheronline.com/premium/v1/weather.ashx?q=59.94%2C30.31&num_of_days=4&key=*****************************"
@data = Nokogiri::XML(open(url))
end
end

 

Варьируя значение num_of_days в файле контроллера, получаем прогноз погоды, соответственно, на любой отрезок времени - от 1 дня до двух недель.

 

Разумеется, всегда возможны варианты: сахар и соль, js и css по вкусу. Но для начала вроде бы и хватит? Открываем в браузере localhost:3000/informer/spb и любуемся полученным результатом... что же, теперь реально можно и по кофе.

 

1 Комментарий

  • Aleksej

    написал Aleksej

    Суббота, 17 сентября 2016 20:09

    to Hubbitus: уже внес ремарки в текст согласно твоим мудрым замечаниям...

Оставить комментарий

Добавьте ваш комментарий