【问题标题】:Why won't my assets load in production?为什么我的资产无法在生产中加载?
【发布时间】:2015-12-20 19:36:26
【问题描述】:

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

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

该应用程序没有问题。我跑了:

rake assets:precompile

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

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

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

<app root>/public/assets

Webrick 和 Unicorn 是否因为某些奇怪的原因无法提供这些资产?如果是这样,那可能是什么原因?我是否需要使用 Nginx 和Passenger 在一个简单的、面向内部的、完全不是应用程序的应用程序上进行全面部署?

我错过了什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.2


    【解决方案1】:

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

    config.serve_static_files 将 Rails 本身配置为提供静态服务 文件。默认为true,但在生产环境中开启 关闭作为用于运行的服务器软件(例如 NGINX 或 Apache) 应用程序应该提供静态资产。与默认不同 在运行时将其设置为 true(绝对不推荐!)或 使用 WEBrick 在生产模式下测试您的应用

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

    【讨论】:

    • 生产环境在 4.2.5 中的默认设置是:``` config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? ```。我没有设置那个环境变量。我一做,它就起作用了。非常非常感谢。
    【解决方案2】:

    你必须写

    $rake assets:precompile RAILS_ENV=production
    

    您还必须将 config_assets_precompile = true 设置为 config/initializers/assets.rb 文件

    也可以试试rubyracer gem。

    【讨论】:

      【解决方案3】:

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

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

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

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

      EXPORT RAILS_ENV=production
      EXPORT RACK_ENV=production
      

      https://askubuntu.com/a/731

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

      【讨论】:

        猜你喜欢
        • 2014-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-10
        • 1970-01-01
        • 2020-08-24
        • 2021-09-19
        • 2020-06-19
        相关资源
        最近更新 更多