【问题标题】:Getting Mixlib::ShellOut::ShellCommandFailed获取 Mixlib::ShellOut::ShellCommandFailed
【发布时间】:2014-10-07 05:34:45
【问题描述】:

在 OpsWorks 上启动其中一个实例时出现以下错误。有人对此错误有任何想法吗?

这是在官方错误公告之前打印的(根据sethvargo的要求):

[2014-08-13T17:27:08+00:00] INFO: Processing directory[/srv/www/instance/shared/cached-copy] action 
delete (opsworks_delayed_job::deploy line 48)
[2014-08-13T17:27:08+00:00] INFO: Processing ruby_block[change HOME to /home/deploy for source checkout] action run (opsworks_delayed_job::deploy line 56)
[2014-08-13T17:27:08+00:00] INFO: ruby_block[change HOME to /home/deploy for source checkout] called
[2014-08-13T17:27:08+00:00] INFO: Processing deploy[/srv/www/instance] action deploy (opsworks_delayed_job::deploy line 65)
[2014-08-13T17:27:09+00:00] INFO: deploy[/srv/www/instance] cloning repo git@github.com:xx/xx.git to /srv/www/instance/shared/cached-copy
[2014-08-13T17:27:17+00:00] INFO: deploy[/srv/www/instance] checked out branch: master onto: deploy reference: 714153bbb6a37f0484526cf4da3eda4fcd8df977
[2014-08-13T17:27:17+00:00] INFO: deploy[/srv/www/instance] synchronizing git submodules
[2014-08-13T17:27:17+00:00] INFO: deploy[/srv/www/instance] enabling git submodules
[2014-08-13T17:27:18+00:00] INFO: deploy[/srv/www/instance] set user to deploy
[2014-08-13T17:27:18+00:00] INFO: deploy[/srv/www/instance] set group to www-data
[2014-08-13T17:27:22+00:00] INFO: deploy[/srv/www/instance] copied the cached checkout to /srv/www/instance/releases/20140813172708
[2014-08-13T17:27:23+00:00] INFO: deploy[/srv/www/instance] set user to deploy
[2014-08-13T17:27:23+00:00] INFO: deploy[/srv/www/instance] set group to www-data
[2014-08-13T17:27:23+00:00] INFO: deploy[/srv/www/instance] running callback before_migrate
[2014-08-13T17:27:23+00:00] INFO: deploy[/srv/www/instance] created directories before symlinking: tmp,public,config
[2014-08-13T17:27:23+00:00] INFO: deploy[/srv/www/instance] linked shared paths into current release: system => public/system, pids => tmp/pids, log => log
[2014-08-13T17:27:23+00:00] INFO: deploy[/srv/www/instance] made pre-migration symlinks
[2014-08-13T17:27:24+00:00] INFO: deploy[/srv/www/instance] set user to deploy
[2014-08-13T17:27:24+00:00] INFO: deploy[/srv/www/instance] set group to www-data
[2014-08-13T17:27:24+00:00] INFO: Gemfile detected. Running bundle install.
[2014-08-13T17:27:24+00:00] INFO: sudo su - deploy -c 'cd /srv/www/instance/releases/20140813172708 && /usr/local/bin/bundle install --path /home/deploy/.bundler/instance --without=test development'

这是错误:

================================================================================
Error executing action `deploy` on resource 'deploy[/srv/www/instance]'
================================================================================


Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '127'

食谱追踪:

Cookbook Trace:
---------------
/var/lib/aws/opsworks/cache.stage2/cookbooks/opsworks_commons/libraries/shellout.rb:8:in `shellout'
/var/lib/aws/opsworks/cache.stage2/cookbooks/rails/libraries/rails_configuration.rb:41:in `bundle'
/var/lib/aws/opsworks/cache.stage2/cookbooks/deploy/definitions/opsworks_deploy.rb:103:in `block (3 levels) in from_file'

资源声明为:

Resource Declaration:
---------------------
# In /var/lib/aws/opsworks/cache.stage2/cookbooks/deploy/definitions/opsworks_deploy.rb

65:     deploy deploy[:deploy_to] do
66:       provider Chef::Provider::Deploy.const_get(deploy[:chef_provider])
67:       keep_releases deploy[:keep_releases]
68:       repository deploy[:scm][:repository]
69:       user deploy[:user]
70:       group deploy[:group]
71:       revision deploy[:scm][:revision]
72:       migrate deploy[:migrate]
73:       migration_command deploy[:migrate_command]
74:       environment deploy[:environment].to_hash
75:       create_dirs_before_symlink( deploy[:create_dirs_before_symlink] )
76:       symlink_before_migrate( deploy[:symlink_before_migrate] )
77:       action deploy[:action]
78: 
79:       if deploy[:application_type] == 'rails'
80:         restart_command "sleep #{deploy[:sleep_before_restart]} && #{node[:opsworks][:rails_stack][:restart_command]}"
81:       end
82: 

【问题讨论】:

  • 失败的shell命令是什么?在输出中查看更高的内容 - 它会说明运行了哪个命令来生成错误的退出代码。
  • 您好,我在顶部的问题中添加了更多详细信息。它基本上包括显示“执行错误...”提示之前的日志。
  • 如果您手动运行该命令会发生什么? sudo su - deploy -c 'cd /srv/www/instance/releases/20140813172708 && /usr/local/bin/bundle install --path /home/deploy/.bundler/instance --without=test development'
  • 我远程连接到设置失败的实例。手动运行上述命令时,我得到的结果是: -su: /usr/local/bin/bundle: No such file or directory.
  • 正确 - 这就是错误。您没有捆绑程序安装程序和/或二进制文件不在您的 $PATH

标签: ruby-on-rails ruby-on-rails-3 chef-infra chef-recipe aws-opsworks


【解决方案1】:

感谢 Seth Vargo,问题在于 OpsWorks 没有安装 bundler gem。 Chef 版本是 11.10。我们必须手动将 bundler gem 添加到默认的 Chef 设置文件中。

【讨论】:

    【解决方案2】:

    在 Opsworks 下启动实例时遇到了同样的问题。

    调试后发现问题原因是:Stack或Layer设置中没有提到Chef版本。因此,在运行食谱时,会选择一些默认版本的 chef,默认情况下没有安装 bundler。因此,当配方尝试运行 "run bundle install" 时,它会因错误而退出。

    简单的解决方案是在堆栈或层设置下显式添加厨师版本以及其他设置(如果有):

    {
    
     <other settings>
    
    
     "opsworks_bundler": {
        "manage_package": "true",
        "version": "1.16.3"
      }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2020-02-24
      • 1970-01-01
      相关资源
      最近更新 更多