为什么我的资产不能加载到生产环境中?

Why won't my assets load in production?

这是几年来我第一次尝试在服务器 运行ning 上以生产模式放置 Rails 应用程序而不使用 EngineYard。可能有很多我不记得了。这是版本 4.2.5.

我不会使用 Capist运行o 进行部署,我现在不会遇到所有这些麻烦。这是我的团队面向内部的应用程序。当我更新某些内容时,我只是从 Github 中提取代码。很简单。

应用程序没有问题。而我 运行:

rake assets:precompile

但是所有资产都会产生 404。只有我的原始应用程序出现了。

我现在甚至没有尝试 运行 Nginx。无论我 运行 Webrick 还是尝试启动 Unicorn 进程,我都没有 CSS.

然而,所有显示 404 的文件,我都非常非常清楚地看到它们:

<app root>/public/assets

Webrick 和 Unicorn 是否由于某些运行ge 原因无法提供这些资产?如果是这样,那是什么原因?我是否需要使用 Nginx 和 Passenger 在一个简单的、面向内部的、没有任何应用程序的应用程序上进行完整部署?

我错过了什么?

你必须写

$rake assets:precompile RAILS_ENV=production

另外你必须设置为config_assets_precompile = true到config/initializers/assets.rb文件

也试试 therubyracer gem。

缺少 CSS/JS 表明您的资产没有在生产中加载(很明显)。

修复它的方法是使用 Ruby Doggy 推荐的方法(并在推送到生产之前预编译资产),或者使用类似 post-receive 钩子的东西来实现相同的目的。

要考虑的一个重要因素是 environment variables 您设置的是哪个。我从未使用过 Engine Yard,但 Heroku 为每个应用程序设置了 RAILS_ENV 变量:

如果我是你,我会在你的生产环境中设置 RACK_ENVRAILS_ENV 变量 OS:

EXPORT RAILS_ENV=production
EXPORT RACK_ENV=production

https://askubuntu.com/a/731

这将设置环境变量,应该允许您在推送后调用rake assets:precompile以获得正确的资产。

首先,正如其他人所说,请检查您是否 运行 处于生产模式?其次,您提到您在WEBrick 中是运行。 config.serve_static_files 是否设置为 true

config.serve_static_files configures Rails itself to serve static files. Defaults to true, but in the production environment is turned off as the server software (e.g. NGINX or Apache) used to run the application should serve static assets instead. Unlike the default setting set this to true when running (absolutely not recommended!) or testing your app in production mode using WEBrick

http://guides.rubyonrails.org/configuring.html#rails-general-configuration