ruby-on-rails - Heroku 上全新 Rails 5.2.1 应用程序中的 Javascript 无法正常工作
问题描述
我认为 Heroku 生产环境中 Rails 5 应用程序中的 JavaScript 文件存在很大问题。它虽然在本地工作
我的配置:
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
第八步:启动服务器
> 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 步的输出更加清晰
解决方案
我解决了我的问题:这是uglifier
导致问题的宝石,因为它无法正常工作。我只是一个初学者,回顾这个 gem 应该是我需要检查的第一件事,因为它执行 JS 压缩。
现在 JS 运行良好。这是我GemFile
为使其正常工作所做的更改:
从
gem 'uglifier', '>= 1.3.0'
到
gem 'uglifier', '~> 3.0.4'
uglifier
gem 版本是4.1.18
在生产环境中导致这个 JS 错误的。
希望这有助于其他人在 Heroku 上确定他们的 JS 错误
推荐阅读
- typescript - 当测试和源在一起时,Sonarqube 测试报告“报告指的是未配置为测试文件的文件”
- windows - 通过 Win-PS2EXE 转换为 EXE 的 Powershell 脚本可以手动运行,但作为计划任务运行时会出错
- angular - 无法设置组面板网格属性
- javascript - 如何在边界内为 div 设置动画
- amazon-s3 - Lambda 边缘源请求 502
- sql - eclipselink jpa named-native-query 上的“ORA-00936 缺少表达式”,但在独立客户端中工作
- javascript - Javascript 在 Node.js 上下文中访问 ejs 变量
- python - 将自定义函数应用于熊猫数据框中的每一行的更快方法?
- javascript - 如何修复找不到模块:无法解析“./store”
- python - 根据过去的退货率预测产品退货率