Я думаю, что есть большая проблема с файлами JavaScript в приложениях Rails 5 в производственной среде на Heroku. Работает локально, хотя
Моя конфигурация:
Windows: 10 Education
Rails: 5.2.1
Ruby: 2.4.4p296
Heroku: heroku/7.7.7 win32-x64 node-v10.7.0
postgres: postgres (PostgreSQL) 10.3
Теперь я представлю вам шаги, которые я сделал, чтобы подтвердить, что это не работает, и вы можете попробовать сами. В конце вы получите ссылку на репозиторий Bitbucket и приложение на Heroku.
Шаг 1. Создание нового приложения Rails 5 и переход в корневую папку
> rails new my_app --database=postgresql
> cd my_app
Шаг 2: Генерация контроллера
> rails generate controller static_pages
Шаг 3: отредактируйте файл / app / controllers / static_pages_controller
class StaticPagesController < ApplicationController
def show
end
def destroy
end
end
Шаг 4: создайте представления для отображения с действиями
/ app / views / static_pages / show.html.erb:
this is the show view
here is a link to the delete action:
<%= link_to t('logout'), logout_path, method: :delete %>
/ app / views / static_pages / destroy.html.erb:
this is the destroy view which is called with a link_to method: :delete
Шаг 5: отредактируйте файл /config/routes.rb
Rails.application.routes.draw do
root 'static_pages#show'
get 'static_pages/show'
delete '/logout', to: 'static_pages#destroy'
end
Шаг 6: проверьте маршруты
> rails routes
Prefix Verb URI Pattern Controller#Action
root GET / staticpages#show
staticpages_show GET /staticpages/show(.:format) staticpages#show
logout DELETE /logout(.:format) staticpages#destroy
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
Шаг 7: создайте БД и перенесите
> rails db:create
Created database 'my_app_development'
Created database 'my_app_test'
> rails db:migrate
Шаг 8: запустить сервер
> rails server
Шаг 9: перейдите на localhost: 3000 / и щелкните по представленной ссылке. ссылка работает и отправляет действие удаления на сервер
Started GET "/" for 127.0.0.1 at 2018-09-03 18:43:52 +0200
Processing by StaticPagesController#show as HTML
Rendering static_pages/show.html.erb within layouts/application
Rendered static_pages/show.html.erb within layouts/application (12.2ms)
Completed 200 OK in 504ms (Views: 486.7ms | ActiveRecord: 0.0ms)
Started DELETE "/logout" for 127.0.0.1 at 2018-09-03 18:43:57 +0200
Processing by StaticPagesController#destroy as HTML
Parameters: {"authenticity_token"=>"10NHmV8N4tF3O0r/YYtKtKmHm3xthGjPAE51osb7L9skCM5ZoM2RoiCtZD4Crh9d69ndTOeNRMmIW28ipI/z9A=="}
Rendering static_pages/destroy.html.erb within layouts/application
Rendered static_pages/destroy.html.erb within layouts/application (0.0ms)
Completed 200 OK in 90ms (Views: 73.0ms | ActiveRecord: 0.0ms)
Шаг 10: создайте приложение heroku (вы должны войти в систему heroku в вашей системе)
> heroku create
Шаг 11: отправь свою работу в Heroku
> git add -A
> git commit -m "init"
> git push --set-upstream heroku master
Шаг 12: откройте приложение Heroku и сделайте то же, что и на шаге 9, и потерпите неудачу, потому что JavaScript не работает правильно
(...) Started GET "/" for 84.147.254.28 at 2018-09-03 16:47:44 +0000
(...) Processing by StaticPagesController#show as HTML
(...) Rendering static_pages/show.html.erb within layouts/application
(...) Rendered static_pages/show.html.erb within layouts/application (9.2ms)
(...) Completed 200 OK in 27ms (Views: 13.7ms)
.
.
.
(...) Started GET "/logout" for 84.147.254.28 at 2018-09-03 16:48:05 +0000
(...) ActionController::RoutingError (No route matches [GET] "/logout"):
Это либо явная ошибка на Rails, либо на стороне Heroku, так как все, что вы видите, я просто создал новое приложение rails и изменил маршруты, сгенерировал контроллер и сделал 2 представления для действий контроллера.
Вот ссылки, если вы хотите проверить все исходники приложения и приложения, развернутого на heroku.
Вы можете проверить исходный код здесь: BitBucket Repo
И приложение здесь: Приложение Heroku
Кто-нибудь еще испытывает такие трудности с Rails и Heroku, или я могу что-нибудь сделать, чтобы это сработало?
РЕДАКТИРОВАТЬ : немного упростили вывод шага 12, удалив ненужную информацию журнала и отметки времени