【问题标题】:How to debug RVM setup from Chef and Vagrant?如何从 Chef 和 Vagrant 调试 RVM 设置?
【发布时间】:2013-02-24 04:59:44
【问题描述】:

我在 Vagrant VM 上使用 Chef-solo 设置了 RVM 就好了,但是我对为什么在 rails 项目中找不到 bundler 感到困惑。

所以,配置后我看到:

上次登录时间:2012 年 10 月 4 日星期四 15:23:58 从 10.0.2.2 vagrant@vm:~$ ruby​​ -v ruby 1.9.3p327(2012-11-10 修订版 37606)[x86_64-linux] vagrant@vm:~$ 宝石列表 *** 当地宝石 *** 大十进制 (1.1.0) 捆绑器 (1.3.2) daemon_controller (1.1.1) 快速线程(1.0.7) io 控制台 (0.3) json (1.5.4) 迷你测试(2.5.1) 乘客 (3.0.18) 机架 (1.5.2) 耙子 (10.0.3, 0.9.2.2) rdoc (3.9.4) rubygems 捆绑器 (1.1.1) rvm (1.11.3.6)

进入我看到的项目目录:

vagrant@vm:~$ cd /www/vm/rails/current/ ==================================================== ============================== = 通知 = ==================================================== ============================== = RVM 在当前目录中遇到了新的或修改过的 .rvmrc 文件 = = 这是一个 shell 脚本,因此可能包含任何 shell 命令。 = = = = 仔细检查该文件的内容以确保内容是 = = 在信任它之前是安全的! (选择下面的v[iew]查看内容)= ==================================================== ============================== 您希望信任此 .rvmrc 文件吗? (/www/vm/rails/current/.rvmrc) y[es], n[o], v[iew], c[ancel]> y mkdir:无法创建目录`/usr/local/rvm/gems/ruby-1.9.3-p327@vm':权限被拒绝 gemset vm 不存在,正在创建。 mkdir:无法创建目录`/usr/local/rvm/gems/ruby-1.9.3-p327@vm':权限被拒绝 mkdir:无法创建目录`/usr/local/rvm/gems/ruby-1.9.3-p327@vm':权限被拒绝

但是现在,bundle 已经找不到了,而且我也无法激活 RVM...有什么想法可以调试吗?

$ rvm 使用 ruby​​-1.9.3-p327 请注意 `rvm gem ...` 已被删除,请尝试使用 `gem ` 或 `rvm all do gem `。 (见:'rvm用法')

PS 我的节点 json 基本上是这样的:https://github.com/mulderp/chef-rails-stack

【问题讨论】:

    标签: rvm chef-infra vagrant


    【解决方案1】:

    我使用https://github.com/mpapis/rvm-binary/blob/master/cookbooks/binary/recipes/default.rb#L11进行调试:

    class Chef::Resource::Script
      def log_code command
        if Chef::Config[:log_level] == :debug
          code "{ #{command}; _ret=$?; echo \"Exit status was $_ret.\"; exit $_ret; } 2>&1 |
    tee /var/log/#{@command.to_s.gsub(/ /,"_")}.log; exit ${PIPESTATUS[0]}"
        else
          code command
        end
      end
    end
    

    然后使用log_code代替code,它将日志保存在/var/log/#{@command.to_s.gsub(/ /,"_")}.log

    关于 RVM 与 Chef 的轻松集成检查 https://gist.github.com/sevos/5076747

    deploy_user = node[:deploy][:user]
    deploy_user_home = File.join('/', 'home', deploy_user)
    rvm_version = "head"
    
    execute "install_rvm_for_deploy_user" do
      user deploy_user
      command "curl -L https://get.rvm.io | bash -s #{rvm_version}"
      environment "HOME" => deploy_user_home
      creates "#{deploy_user_home}/.rvm"
    end
    
    node['buildpack']['ruby_versions'].each do |ruby_version|
      execute "install_rvm_ruby_#{ruby_version}" do
        user deploy_user
        environment "HOME" => deploy_user_home
        command "#{deploy_user_home}/.rvm/bin/rvm install #{ruby_version} --autolibs=3"
      end
    end
    
    file "#{deploy_user_home}/.rvmrc" do
      content 'export rvm_trust_rvmrcs_flag=1'
      owner deploy_user
      mode 0644
    end
    

    【讨论】:

    • 谢谢,米哈尔!很高兴看到这个......我会在星期一检查......可惜,我们没有在 Wroclove.rb 见面
    • 下一次,我会尝试参观周围的所有活动;)
    • 不幸的是,我还是有点迷茫。如果我运行你的食谱,我确实看到一些安装正在进行:请参阅gist.github.com/mulderp/5134887 - 这可能是用户配置问题 - 我将尝试让 Vagrant 用户成为 rvm 用户。 'rvm list' 现在为 rvm 用户提供'no rubies'
    • 如 irc #rvm 上所讨论的 - 需要更好地支持在厨师(或 capistrano)等自动化环境中处理 sudo
    • 从公共网站执行 bash 脚本的做法是一种可怕的安全做法,尤其是因为 chef 以特权用户身份运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多