在 AWS 弹性 beanstalk 上部署 Rails - 静态资产路由不起作用
Posted
技术标签:
【中文标题】在 AWS 弹性 beanstalk 上部署 Rails - 静态资产路由不起作用【英文标题】:Deploying Rails on AWS elastic beanstalk - Static Asset routing not working 【发布时间】:2014-08-29 22:08:23 【问题描述】:我通过 Amazon 的 eb 工具在 AWS elastic beanstalk 上建立了我的 rails 应用程序。 在弹性 beantalk 上,我使用它的默认负载均衡器,并且正在运行 ubuntu 64bit 和 ruby 2.0。
我遇到了两个主要问题:
1) 根路由不工作。
在我的 config/routes.rb 中,我尝试了:
root '控制器#action 根 :to => 'controller#action' 根到:'controller#action'
发现它们都没有工作。服务器给我一个错误说:
无效的路由名称,已在使用中:'root' (ArgumentError)
我猜测 Rail 的默认 root=>public/index.html 和我自己在 config/routes.rb 中的路由之间存在某种冲突?所以我创建了 public/index.html 并且根 url '/' 现在服务于 public/index.html。我想找到一种让它以“Rails”方式工作的方法,将根 url 路由到控制器#action。
2) 未提供静态资产。
在我的 layouts/application.html.erb 文件中,我有 Rails 默认值
真的%> 真的%>
但是,当我在生产环境中启动弹性 beanstalk 上的 Rails 应用程序时,我得到:
http://myurl.com/javascripts/application.js404(未找到)http://myurl.com/stylesheets/application.css404(未找到)
有趣的是,公共/图像中的资产可以正确提供。
有人知道这些问题的解决方案吗?
提前谢谢你!
==========================编辑===================== ======
我正在使用 Amazon 64 位 Linux 和Passenger Standalone
【问题讨论】:
您能说出您正在使用的解决方案堆栈的确切名称吗?是“运行 Ruby 2.0 (Puma) 的 64 位 Amazon Linux 2014.03 v1.0.4”还是其他版本。你可以试试这个最新版本吗? 我已将其添加到问题中! 您能否尝试最新的独立乘客解决方案堆栈版本 - 目前为 v1.0.3。确切的解决方案堆栈名称是“64bit Amazon Linux 2014.03 v1.0.3 running Ruby 2.0 (Passenger Standalone)”? 是的,这就是我现在使用的,抱歉我不够具体!我的本地开发环境也是 Ruby 2.0 对于(1)你能试试这里的建议吗:***.com/a/24222282/161628 【参考方案1】:尝试以下方法:
config/routes.rb
Rails.application.routes.draw do
root 'home#index'
end
删除或注释掉'/'的所有定义(包括获取'/'、匹配'/'等)
app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
render 'index'
end
end
app/views/home/index.html.erb
<h1>HELLO WORLD.</h1>
并确保删除 public/index.html。
【讨论】:
以上是关于在 AWS 弹性 beanstalk 上部署 Rails - 静态资产路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章
markdown 用于AWS弹性beanstalk部署的后端服务器
AWS 弹性 beanstalk 可以配置或移动到另一个 AZ
在 AWS Elastic Beanstalk 上部署 Windows 服务和 Web 应用程序
如何使用 AWS CLI 更新弹性 beanstalk 代码?