在 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 代码?

在 AWS Elastic Beanstalk 上部署 Rails / Ember 应用程序

AWS - 如何在不丢失实例和弹性 IP 的情况下暂停 Elastic Beanstalk 环境?