【问题标题】:Rails / Heroku / Cloudcontrol: Precompiled assets manifest ignoredRails / Heroku / Cloudcontrol:预编译资产清单被忽略
【发布时间】:2015-11-05 18:38:45
【问题描述】:

我目前正在对资产管道预编译并将其推送到服务器上的问题进行故障排除。我在 Rails 4.2.3 和 ruby​​ 2.2.0 上!

我使用

预编译我的资产
RAILS_ENV=production bundle exec rake assets:precompile

并成功创建了几个文件,包括 .sprockets-manifest-... 文件。

如果我现在尝试推送应用程序,似乎未检测到清单文件 - 我通常的“无法编译资产”问题(我正在预编译的原因)发生:

   Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   rake aborted!
   Mysql2::Error: Can't connect to MySQL server on '127.0.0.1' (111)

我很确定这在以前可行,但不知何故 - 也许通过升级到 rails 4.2.3,它现在失败了......

感谢任何形式的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby heroku asset-pipeline cloudcontrol


    【解决方案1】:

    使用版本

    随着新版本(> 3.x),清单文件的名称已更改为.sprockets-manifest-xxxx.json!因此,无法正确识别预编译资产。旧版本使用旧名称.manifest-xxxx.json 并识别预编译资产。

    【讨论】:

      【解决方案2】:

      附加凭据(如数据库)在构建期间不可用。在cloudControl 上,您可以通过读取BUILDPACK_RUNNING 环境变量来检测您是否在构建过程中。有关示例,请参见 Rails notes

      推荐的方法是让 buildpack 在推送期间编译资产。但是您需要确保 Rails 没有尝试连接到数据库。这是一个 related SO question 关于这个。

      如果您想在本地预编译并且未检测到这一点,我建议您检查清单和预编译资产是否已提交到存储库。一个常见的陷阱是.gitignore 文件。

      【讨论】:

      • 感谢您的快速回复。我已经在我的 application.rb 中包含了config.assets.initialize_on_precompile = false if ENV['BUILDPACK_RUNNING']——但这不再适用于 rails 4!我还检查了 .gitignore 并且它不排除例如公用文件夹。我知道检查您发布的相关问题并尝试检查这个...
      • 检查了答案,不幸的是它们不适用。 cloudcontrol 是否还提供这样的标志来使环境变量在构建期间可用?我还想知道:它与 rails 4.1 一起使用,但停止与 rails 4.2.3 一起使用... :(
      • 不,我们不提供这样的标志。因此,如果它在 Rails 升级之前工作并停止,那么 Rails 方面肯定发生了一些变化。如果你发现了,请告诉我。很想知道。
      • 我重新处理了所有提交并确定了问题。在新版本的 sprockets (3.x) 中,清单文件现在命名为 .sprockets-manifest....json - 我感觉 buildpack 目前不支持此功能。我现在使用 sprockets 2.13.2 并且推送工作完美 - 我的预编译资产已识别 - 清单文件具有“旧”名称 manifest-....json。
      • 我明白了。谢谢(你的)信息。您可能想回答自己的问题,然后将自己的答案标记为正确答案。
      猜你喜欢
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多