繁体   English   中英

如何从 Capistrano deploy.rb 中的 rbenv 设置获取 bundle_path?

[英]How to get bundle_path from rbenv setting in Capistrano deploy.rb?

由于我需要capistrano-bundlercapistrano-rbenv gems,并且在 deploy.rb 文件中设置如下:

    # rbenv
    set :rbenv_type, :user
    set :rbenv_ruby, '2.0.0-p645'
    set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
    set :rbenv_map_bins, %w{rake gem bundle ruby rails}

    # bundler
    set :bundle_roles, :all                                         # this is default
    set :bundle_servers, -> { release_roles(fetch(:bundle_roles)) } # this is default
    set :bundle_binstubs, -> { shared_path.join('bin') }            # default: nil
    set :bundle_gemfile, -> { release_path.join('Gemfile') }        # default: nil
    set :bundle_path, -> { shared_path.join('bundle') }             # this is default
    set :bundle_without, %w{development test}.join(' ')             # this is default
    set :bundle_flags, '--deployment --quiet'                       # this is default
    set :bundle_env_variables, {}                                   # this is default

显然 bundle_path 不在shared子路径中,它应该是/home/deploy/.rbenv/shims/bundle 那么在我设置了 rbenv 的设置后,我如何才能获得该路径。 我挣扎了很长时间,但在githubgoogle.com上一无所获

谢谢。

要获得 rbenv 的 gem 路径,您可以执行rbenv exec gem environment gemdir

但是,我认为问题来自:bundle_path:bundle_flags设置的组合,以及 bundler 如何与 rbenv 交互。

由于的--deployment选项(在设置:bundle_flags ),安装的宝石不会rbenv的系统gemdir安装它们的可执行文件,但在app/shared/bundle ,这样你就不会在你得到他们$PATH

要解决此问题,您需要将命令添加到:rbenv_map_bins:bundle_bins以便正确添加前缀。

比如对于jekyll,需要设置:

set :rbenv_map_bins, fetch(:rbenv_map_bins, []).push('jekyll')
set :bundle_bins, fetch(:bundle_bins, []).push('jekyll')

这使得由 capistrano 执行的命令类似于

RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec bundle exec jekyll

这将起作用,因为bundle:rbenv_map_bins并且bundle install --deployment .bundler/config创建了一个.bundler/config文件,该文件设置了app/share/bundle的路径

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM