我正在尝试通过厨师部署一个ruby应用程序。我已经通过rvm安装了ruby和rubygems。
当我在外壳上手动安装捆绑软件--deployment时,我将所有捆绑软件下载到供应商/捆绑软件位置,并且一切正常。
但是,当我对使用bash资源的厨师执行相同操作时,会收到以下错误消息。我觉得PATH或环境变量有些问题。它也通过厨师下载所有宝石,但是当我打开外壳并检查是否出现错误时。请注意-厨师食谱执行无任何错误。
*bundle exec rake db:create RAILS_ENV=production
(in /home/xyz)
rake aborted!
undefined method `[]' for nil:NilClass
/home/xyz/Rakefile:4:in `require'
(See full trace by running task with --trace)*
# ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
# gem -v
1.8.1
bundle -v
Bundler version 1.0.15
# gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.1
- RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-1.9.2-p290
- RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-1.9.2-p290/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/rvm/gems/ruby-1.9.2-p290
- /usr/local/rvm/gems/ruby-1.9.2-p290@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
bash "bundle install" do
user "root"
cwd "/home/xyz/"
code <<-EOH
source /etc/profile.d/rvm.sh
rvm use 1.9.2-p290 --default
/usr/local/rvm/gems/ruby-1.9.2-p290/bin/bundle install --path vendor/bundle
/usr/local/rvm/gems/ruby-1.9.2-p290/bin/bundle exec rake db:create RAILS_ENV=production
EOH
end
这是我第一次部署任何ruby应用程序,我在Google上搜索了很多,并尝试了许多解决方案,但是却收到了越来越多的错误,但没有解决方案。任何形式的帮助将不胜感激。
谢谢,伊姆兰
因此,我相信您对RVM安装的ruby遇到一些问题的原因与linux + shell的性质有关。RVM
当它为您提供可以在系统上安装的ruby构建列表时,掩盖了很多复杂的底层功能。简单的答案是RVM(类似于rbenv
)通过连接到您的环境中而起作用PATH
。...这是Sam Stephenson在这里提供的非常详细的解释:RVM和rbenv实际如何工作?但是我离题了。我的猜测是您的RVM安装是针对单个用户(例如,具有home目录的用户)进行的/home/xyz/
。在这一点上,我认为您的问题如下:
您是通过单用户安装来安装RVM的(此处详细信息:https : //rvm.io/rvm/install)。安装RVM时,他们可能会让您在这里执行此步骤:echo "source $HOME/.rvm/scripts/rvm" >> ~/.bash_profile
。此步骤向您添加命令,.bash_profile
以便在每个新的会话/终端窗口上,您的用户(在本例中为user xyz
)读取有关如何运行/使用RVM的信息。Chef中的bash资源实际上没有使用用于连接和运行命令的shell。我的想法是,如果您运行以下命令:
bash 'install_ruby_stuff' do cwd ::File.dirname(/home/xyz) code <<-EOH source /home/xyz/.rvm/scripts/rvm bundle exec rake db:create RAILS_ENV=production EOH end
我觉得它可能会更好一些。如果这不起作用,请运行which bundle
并找出rvm将bundle存根(stub)安装在哪里的确切位置,然后bundle
用/path/to/bundle
和替换上面的内容,这也可能会有所帮助。Chef中的每个bash资源调用在本质上都被视为一个单独的shell,因此需要在调用bash资源的同一上下文中定义所需的任何变量PATH
或ENV
变量。
希望这对您有所帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句