Пробую написать первое rails приложение.

[Д] Дмитрий, 21 июля 2016, 19:51 , 4 подписчика

Пока нет курса НПДВ по рельсам, пишу сюда.

Начал писать своё первое приложение на ror, по скринкастам которые вы советовали. И конечно появились вопросы. Прошу вас, по возможности с ними помочь.

Скинул приложение на github [https://github.com/vergilsm/my-store]

Проблема сейчас возникла в 403.html Надо создать в public файл 403.html так, чтобы внутри сгенерились потроха файла. Пока ответа самостоятельно не нашёл.

Обсуждение (21)


Вадим Венедиктов Учитель

[В]

Дим, самое крутое качество Ruby on Rails разработчика, то что он в первую очередь стремиться сделать что-то законченное.

403.html — не самый важный файл

Сделай приложение и выкати его на heroku, чтобы можно было им уже пользоваться хоть в какой-то форме :)


Michael Butlitsky Учитель

[M]

Дима, начинай с самых простых и очевидных вещей. Нафиг тебе 403 файл.


[Д]

Я просто пытаюсь последовательно идти за скринкастом, а там сейчас тема про Application Controller и как им можно пользоваться. Просто есть изменения, из-за этого в других файлах. Боюсь запутаться, ведь не знаю что будет дальше и как будет реагировать приложение без этих изменений.


Michael Butlitsky Учитель

[M]

Попробуй с railstutorial.org пойти последовательно, если с этим скринкастом застрянешь. На русский его по-моему уже перевели даже.


[Д]

Всё good, Дмитрий нашёл как сделать!


[Е]

О, а можно и по рельсам вопросы задавать иногда ;)?


Michael Butlitsky Учитель

[M]

Можно, но подробных ответов не обещаем. Все-таки по рельсам у нас другой курс ;)


[Д]

Хотел спросить про хелперы. В application_helper.rb добавил два метода: urls_to_images и urls_to_links Добавил их в show.html.erb Первый должен выводить в браузере картинку, а второй активную ссылку. Но выводятся только тексты ссылок. Скинул на гитхаб, посмотрите пожалуйста в чем проблема. В urls_to_images исправил (gpg на jpg)


Вадим Венедиктов Учитель

[В]

Дим, писать html-код в хелперах — это очень плохая практика.

Также аккуратнее с регулярками. Сейчас мне очень сложно понять, что должен делать твой метод.

Напиши на него тесты и посмотри, проходят ли они.


[Д]

Вадим, у меня html код в show.html.erb а в application_helper.rb два метода, показывающие как выводить ссылки в браузере. Как мне кажется, что-то не так с s.html_safe, но не знаю как исправить. Тесты на рельсах писать не умею. Пробовал начать railstutorial.org и как раз на тестах и застопорился. Там проблема Rspec с Capybara, не определяется метод visit. Вообще конечно проблема, неизвестный материал плюс ещё когда он не работает и ты ничерта не понимаешь как это исправить.... В гугле пытался найти ответы, но они датируются от 2009 до 2012 и крайне редко 2014г. Пробовал исправлять по ним, но это тоже старьё и только больше запутывало. В общем я весь негодую:(


Вадим Венедиктов Учитель

[В]

Вадим, у меня html код в show.html.erb а в application_helper.rb два метода, показывающие как выводить ссылки в браузере.

У тебя в application_helper.rb вижу вот такое:

'<p><img src="\1"/></p>'

Это строка в html-разметке. Такое в хелперах — плохая идея. Используй метод content_tag на худой конец.

Тесты на рельсах писать не умею

Ну хотя бы в byebug потесть хелперы. Напиши его вызов в методе, перезагрузи страницу и в окне с сервером у тебя будет консоль в этом месте.

И обязательно почитай про метод html_safe.


[Д]

Пошёл заново по обновлённому курсу [https://www.railstutorial.org/book/filling_in_the_layout#table-url_mapping] и застрял в разделе 5.3.2 Rails routes. Вроде всё под копирку сделал, но при запуске теста выдаёт:

/home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:328:in `check_part': Missing :controller key on routes definition, please check your routes. (ArgumentError)
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:308:in `check_controller_and_action'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:251:in `normalize_options!'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:115:in `initialize'

Как с этим справиться не знаю.


Michael Butlitsky Учитель

[M]

Надо проверить config/routes.rb там чего-то не хватает. Покажите его.


Вадим Венедиктов Учитель

[В]

Дим, откатись на последнюю версию 4-х рельс. По 5-м учебных материалов ещё очень мало. Будешь часто такие глюки ловить.


[Д]

Вот config/routes.rb

Rails.application.routes.draw do
  root 'static_pages#home'
  get  '/help',    to: 'static_pages#help'
  get  '/about',   to: 'static_pages#about'
  get  '/contact', to: 'static_pages#contact'
end

Вадик, я уже с ума схожу)) начиная заново и катаясь по версиям. Здесь, до этого момента всё шло достаточно ровно, надеюсь и после решения проблемы так и останется.


[Е]

А есть последняя версии на гитхабе, чтоб склонировать репозиторий и у себя посмотреть? Стало интересно поразбираться с данной ошибкой, для собственной практики..

Ничего, что я влез в данную дискуссию? Просто на данный момент также изучаю rails :))


Michael Butlitsky Учитель

[M]

Дим, приложи еще исходик теста, на котором возникает ошибка.


[Д]

static_pages_controller_test.rb

require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest

  def setup
    @base_title = "Ruby on Rails Tutorial Sample App"
  end

  test "should get home" do
    get root_path
    assert_response :success
    assert_select "title", "#{@base_title}"
  end

  test "should get help" do
    get help_path
    assert_response :success
    assert_select "title", "#{@base_title}"
  end

  test "should get about" do
    get about_path
    assert_response :success
    assert_select "title", "#{@base_title}"
  end

  test "should get contact" do
    get contact_path
    assert_response :success
    assert_select "title", "#{@base_title}"
  end
end

Michael Butlitsky Учитель

[M]

И полный стектрейс ошибки, и на каком из этих тестов валится.


[Д]

В том то и дело, что валится не на тесте. До него даже не доходит.

vergil@vergilsm:~/rails_projects/sample_app$ rails t
/home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:328:in `check_part': Missing :controller key on routes definition, please check your routes. (ArgumentError)
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:308:in `check_controller_and_action'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:251:in `normalize_options!'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:115:in `initialize'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:68:in `new'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:68:in `build'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:1698:in `add_route'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:1670:in `decomposed_match'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:1634:in `block in match'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:1617:in `each'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:1617:in `match'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:722:in `map_method'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/mapper.rb:680:in `get'
    from /home/vergil/rails_projects/sample_app/config/routes.rb:3:in `block in <top (required)>'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/route_set.rb:389:in `instance_exec'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/route_set.rb:389:in `eval_block'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/routing/route_set.rb:371:in `draw'
    from /home/vergil/rails_projects/sample_app/config/routes.rb:1:in `<top (required)>'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `load'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `block in load'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:259:in `load_dependency'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `load'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application/routes_reloader.rb:40:in `block in load_paths'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application/routes_reloader.rb:40:in `each'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application/routes_reloader.rb:40:in `load_paths'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application/routes_reloader.rb:16:in `reload!'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application/routes_reloader.rb:26:in `block in updater'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/activesupport-5.0.0/lib/active_support/file_update_checker.rb:77:in `execute'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application/routes_reloader.rb:27:in `updater'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application/finisher.rb:119:in `block in <module:Finisher>'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/initializable.rb:30:in `instance_exec'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/initializable.rb:30:in `run'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:228:in `block in tsort_each'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:431:in `each_strongly_connected_component_from'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:349:in `block in each_strongly_connected_component'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:347:in `each'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:347:in `call'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:347:in `each_strongly_connected_component'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:226:in `tsort_each'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/tsort.rb:205:in `tsort_each'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/initializable.rb:54:in `run_initializers'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/railties-5.0.0/lib/rails/application.rb:352:in `initialize!'
    from /home/vergil/rails_projects/sample_app/config/environment.rb:5:in `<top (required)>'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:92:in `require'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:92:in `preload'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:143:in `serve'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:131:in `block in run'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `loop'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `run'
    from /home/vergil/.rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/application/boot.rb:19:in `<top (required)>'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /home/vergil/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'

Michael Butlitsky Учитель

[M]

Судя по стектрейсу - у вас работает гребаный spring. Мы в свое время убили буквально целый рабочий день, пытаясь найти проблему, в которой он был виноват.

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

Мы именно поэтому сначала учим пользоваться саблаймом, а потом переходим на IDE.

Запустите конкретный тест без спринга вручную, тогда можно будет поставить диагноз, если проблема останется.