【问题标题】:Rails assets:precompile failing during deploymentRails 资产:部署期间预编译失败
【发布时间】:2012-12-21 12:14:53
【问题描述】:

当我突然意识到它有一个小错误时,我的小rails-app(基于refinerycms)运行良好。修复它,测试正常,提交,推送,部署,常规程序。然而这一次我的部署(之前已经工作过无数次)在assets:precompile 期间崩溃了

    * 2012-12-21 11:44:59 executing `deploy:assets:precompile'
    * executing "cd /home/somename/releases/20121221104442 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
      servers: ["ssh.alwaysdata.com"]
      [ssh.alwaysdata.com] executing command
  *** [err :: ssh.alwaysdata.com] rake aborted!
  *** [err :: ssh.alwaysdata.com] Invalid argument - /nfs/http9/somename/app/ttvz/releases/20121221104442/tmp/cache/assets/D17/790/sprockets%2F159b50b9f479a8cb2519ea6a40f09f92
  *** [err :: ssh.alwaysdata.com] /home/somename/app/ttvz/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.1/lib/active_support/core_ext/file/atomic.rb:38:in `chown'
  ...

当然还有一大堆 Stacktrace。我试图在网上找到一些东西,但失败了。当我尝试预编译应用程序的 current 版本的资产时,同样的事情也发生了(这在开发中就像一个魅力)。

这似乎与 StackOverflow 上的其他 precompile-trouble 不同。

【问题讨论】:

  • 检查您的部署用户是否对您的资产或 tmp 文件夹具有权限。
  • 我无法回答我的问题,因为我不知道它是如何解决的,但我可以告诉你我最终做了什么。 alwaysdata 主要是由 Django 托管的,但我可以安装自己的 rails,这不是什么大问题。因此,为了调试问题,我在atomic.rb 中引入了puts file_name,因为奇迹永远不会停止(或者马上就是圣诞节了:-)解决了这个问题。然而,这让我比以前更加困惑(但至少又是一个固定的应用程序:-)。非常感谢任何有原因的提示。
  • 我刚刚尝试了反向实验并删除了我的puts ...,问题又回来了。然而,即使重新引入这条线,它也没有消失。因为我现在没有任何改变,这不是一大堆问题,但是“解决方案”看起来如此临时甚至是随机的,这很麻烦。

标签: ruby-on-rails deployment capistrano asset-pipeline


【解决方案1】:

与公众的看法相反,事实证明这不是是我的错误。我开始查找atomic.rb 的来源,并认为对chown 的调用实际上最终会完全什么都不做。因此,我在 alwaysdata 用户论坛上留下了一条消息,将其修补了。我的(丑陋的)小补丁部署再次像以前一样工作。

几个小时后,一位友好的工作人员告诉我,这让他怀疑最近的内核升级出了问题。他在同一天晚上修复了它,一切都恢复正常了(没有我的补丁)。

【讨论】:

  • 能否请您提供在 alwaysdata 中托管您的炼油厂cms 项目的不同步骤我真的需要它,但它对我不起作用:( 我使用 rails 4 和 ruby​​2
  • 对不起,我在这里帮不了你太多。有一些论坛主题(最新的是this one)处理在alwaysdata 上运行更高版本的rails。不幸的是,你几乎只能靠自己来做这件事。大多数解决方案涉及编译您自己的 ruby​​、rails 等并在 fcgi 之上运行,这似乎有点过时了,但 ruby​​ 1.9.2 也是如此……如果继续使用这个古老的 ruby​​ 版本,也许我们需要找到另一个托管。
【解决方案2】:

在您的主机教程 (http://wiki.alwaysdata.com/wiki/Deploying_a_Rails_3_application) 中,您必须在开发环境中部署您的应用程序。在这种环境下,资产没有预编译,因此您不会遇到同样的问题。

我建议为 heroku 或 amazon 切换主机,您可以在生产环境中运行您的应用程序!

【讨论】:

  • 感谢您的指点,我想我在阅读本教程时“忽略了”这一点。由于我有 3 个站点在“生产模式”下运行,并带有预编译的资产,这似乎是一个“安全”的教程。我记得在部署第一个时遇到了precompile 的问题,但由于这不是永久性问题,应该有更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多