Пока нет курса НПДВ по рельсам, пишу сюда.
Начал писать своё первое приложение на ror, по скринкастам которые вы советовали. И конечно появились вопросы. Прошу вас, по возможности с ними помочь.
Скинул приложение на github [https://github.com/vergilsm/my-store]
Проблема сейчас возникла в 403.html Надо создать в public файл 403.html так, чтобы внутри сгенерились потроха файла. Пока ответа самостоятельно не нашёл.
Хотел спросить про хелперы. В application_helper.rb добавил два метода: urls_to_images и urls_to_links Добавил их в show.html.erb Первый должен выводить в браузере картинку, а второй активную ссылку. Но выводятся только тексты ссылок. Скинул на гитхаб, посмотрите пожалуйста в чем проблема. В urls_to_images исправил (gpg на jpg)
Вадим, у меня 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'
Как с этим справиться не знаю.
Вот 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
Вадик, я уже с ума схожу)) начиная заново и катаясь по версиям. Здесь, до этого момента всё шло достаточно ровно, надеюсь и после решения проблемы так и останется.
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
В том то и дело, что валится не на тесте. До него даже не доходит.
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>'
Судя по стектрейсу - у вас работает гребаный spring. Мы в свое время убили буквально целый рабочий день, пытаясь найти проблему, в которой он был виноват.
Выпилите этот гем отовсюду и забудьте о нем. Никогда не юзайте незнакомые упрощалки, свистелки-перделки пока не научились делать без них.
Мы именно поэтому сначала учим пользоваться саблаймом, а потом переходим на IDE.
Запустите конкретный тест без спринга вручную, тогда можно будет поставить диагноз, если проблема останется.