【问题标题】:running Rails 3 staging environment locally (404 on all assets)在本地运行 Rails 3 暂存环境(所有资产为 404)
【发布时间】:2012-09-11 02:02:49
【问题描述】:

我在本地运行我的登台服务器:

RAILS_ENV=staging rails console -p 1337

我已经预编译了资产,一切正常,只是我不知道如何为这些资产提供服务。我的 staging.rb 中有这个:

config.serve_static_assets = false

在我的 apache vhost 中,如果我在 80 上收听,我可以访问我的资产:

http://domain.local/assets/application.css

但是,如果我在 1337(与我的 rails 服务器相同的端口)上监听,那么 rails 会吐出 404。我的困惑是,我已经告诉 rails 不要使用 serve_static_assets,那么它为什么要尝试为它们服务呢?

http://domain.local:1337/assets/application.css

我一定错过了什么。该网站显示正常,所有资产仅返回 404:

ActionController::RoutingError (No route matches [GET] "/assets/application-791b26264f9bbe462a28d08cf9a79582.css"):

【问题讨论】:

  • 你安装了 ruby​​racer gem 吗?
  • 我没有,但我刚刚安装,没有它就无法使用。你能解释为什么这可能是问题吗?我以为 ruby​​racer 是用于 javascript 的?我已经更新了收到的确切错误消息。
  • apache 是如何适应的?您是否尝试使用 apache 作为反向代理?您是否安装了诸如 phusion 乘客之类的 ruby​​ 模块? public/assets的内容你会得到什么?
  • @patrickmcgraw 如果我使用 apache 在端口 80 上侦听,这些资产已预编译并正在提供服务。我正在使用 apache 提供静态资产。 public/assets 包含我的应用程序的所有资产,包括 application.css。正如我所说,它在 80 上解析得很好,但是当我使用与 rails 服务器相同的端口时,即使我明确告诉它不要(config.serve_static_assets = false),rails 仍坚持提供静态服务。

标签: ruby-on-rails ruby-on-rails-3 apache2


【解决方案1】:

当您通过

访问您的应用程序时
http://domain.local:1337/

你没有通过 Apache。

如果您只想使用 WEBrick (RAILS_ENV=staging rails s -p 1337) 运行它,那么您应该设置

config.serve_static_assets = true

在您的 staging.rb 中。当您通过

访问您的应用程序时,这将使 WEBrick 为预编译的资产提供服务
http://domain.local:1337

为了使用 Apache 提供的预编译资产,您应该考虑将 Apache(或 Nginx)与 Ruby 模块(例如 Phusion Passenger)结合使用。然后您将能够通过

访问您的应用
http://domain.local

这将使 Apache 为您的资产提供服务,并将所有其他请求转发到模块。你可以阅读更多关于这个here

【讨论】:

  • 谢谢。我会阅读并尝试更多地了解设置。
  • 我会接受这个答案,虽然我还没有弄清楚,但我知道这是由于我自己的疏忽,线索就在你的答案中。与此同时,我确实以某种方式安装和配置了 unicorn 和 nginx :)
  • 太好了。独角兽是个不错的选择!对不起,如果我不够清楚。如果我能提供更多帮助,请告诉我。
猜你喜欢
  • 2014-08-11
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 2016-10-22
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多