首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Capistrano: Bundler不使用rvm gemset

Capistrano: Bundler不使用rvm gemset
EN

Stack Overflow用户
提问于 2012-02-16 23:09:13
回答 2查看 5.4K关注 0票数 4

我有一个Ruby on Rails 3.2应用程序,使用bundler和capistrano进行部署。我的服务器是使用rvm和ruby 1.9.2的Debian挤压机。我阅读了capistrano (http://beginrescueend.com/integration/capistrano/)的rvm内容,在那里可以通过set :rvm_ruby_string, '1.9.2@my_gemset'设置gemset。

但在部署过程中,bundler会将所有gem写入/var/www/my_app/shared/bundle。我想如果我用@符号定义rvm_ruby_string,bundler就会使用gemset。

部署的输出为

代码语言:javascript
复制
  * executing "cd /var/www/my_app/releases/20120216145728 && bundle install --gemfile /var/www/my_app/releases/20120216145728/Gemfile --path /var/www/my_app/shared/bundle --deployment --quiet --without development test"

在哪里可以更改--path /var/www/...以使用rvm中的1.9.2@my_gemset gemset?

也许是这样的,因为我使用了几种环境进行部署(登台、生产……)。这是我的deploy.rb

代码语言:javascript
复制
# RVM bootstrap
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'capistrano/ext/multistage'
require 'bundler/capistrano'
require 'rvm/capistrano'

set :rvm_bin_path, "/usr/local/rvm/bin"
set :rvm_type, :system

set :stages, %w(production staging)
set :default_stage, "staging"

set :application, "my_app"
set :repository,  "gitosis@mydomain.org:my_app.git"

set :scm, :git

set :user, "my_deploy_user"

set :use_sudo, false

set :ssh_options, { :forward_agent => true }

default_run_options[:pty] = true

namespace :deploy do
  task :start do
  end
  task :stop do
  end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

和config/deploy/staging.rb中

代码语言:javascript
复制
set :rails_env, "staging"
set :rvm_ruby_string, '1.9.2@my_gemset'
set :deploy_to, "/var/www/my_app"

role :web, "stage.mydomain.de"                          # Your HTTP server, Apache/etc
role :app, "stage.mydomain.de"                          # This may be the same as your `Web` server
role :db,  "stage.mydomain.de", :primary => true # This is where Rails migrations will run

也许有人能帮我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-17 10:57:50

你们都在使用bundler和rvm集成。Rvm将确保它使用正确的ruby (便于管理红宝石),bundler将把所有的gem分离到共享/bundle目录中。这是生产环境的捆绑包默认设置。我相信这是一种很好的设置方式,还因为它可以开箱即用,将宝石从每个应用程序中分离出来,并让rvm处理红宝石。

如果你真的想使用RVM进行gem分离,你可以从this blogpost by Darcy开始(这适用于passenger)。正如您所看到的,要实现这一点需要付出一些努力,但这是可能的。

票数 5
EN

Stack Overflow用户

发布于 2014-03-07 11:00:51

capistrano-bundler 1.1.2允许您从bundler参数中进行remove the --path flag,并将gem安装到指定的gem集。

下面是我的配置在最后的样子:

代码语言:javascript
复制
set :rvm_type, :system
set :rvm_ruby_version, "2.0.0-p353@#{fetch(:application)}"

set :bundle_path, nil
set :bundle_binstubs, nil
set :bundle_flags, '--system'
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9313687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档