【问题标题】:capistrano deployment unable to bundle install gem with no internet connectioncapistrano 部署无法在没有互联网连接的情况下捆绑安装 gem
【发布时间】:2015-06-01 17:27:35
【问题描述】:

我正在将我的应用程序部署到已安装所有内容的新服务器上。

我正在使用以下 capistrano deploy.rb:

require "capistrano/ext/multistage"
require "bundler/capistrano"

set :default_environment, {
    'ORACLE_HOME' => "/opt/oraclient/64/11.2.0.2/",
    'LD_LIBRARY_PATH' => "$ORACLE_HOME/lib:/usr/local/lib",
    'PATH' => "/opt/ruby/bin:$PATH:$ORACLE_HOME/bin"
}

SECURE_FILES = ['database.yml', 'ldap.yml', 'initializers/secret_token.rb']

set :application,   "myapp"
set :use_sudo,      false

set :scm,           :git
set :repository, "ssh://git@hostname:7999/web/myapp.git"
set :user, "webuser"
set :deploy_via, :remote_cache

after "deploy:update_code", "custom:create_symlinks", "custom:assets_precompile", "custom:miscellaneous"
after "deploy", "deploy:migrate"
after "deploy", "deploy:cleanup"

namespace :deploy do
  desc "Restarting mod_rails with restart.txt"
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{current_path}/tmp/restart.txt"
  end

  [:start, :stop].each do |t|
    desc "#{t} task is a no-op with mod_rails"
    task t, :roles => :app do ; end
  end

  namespace :web do
    desc "Enable maintenance mode for apache"
    task :enable_maintenance, :role => :web do

      run "mkdir -p #{shared_path}/system"
      on_rollback { run "rm -f #{shared_path}/system/maintenance.html" }
      page = File.read('public/maintenance.html')
      put page, "#{shared_path}/system/maintenance.html", :mode => 0644
    end

    desc "Disable maintenance mode for apache"
    task :disable_maintenance, :role => :web do
      run "rm -f #{shared_path}/system/maintenance.html"
    end
  end
end

namespace :custom do
  desc "Creating config, bundler-GEMS symlinks"
  task :create_symlinks, :roles => :app do

    #Secure Configuration File Symlinks 
    SECURE_FILES.each do |link|
      fobj = "#{release_path}/config/#{link}"
      run <<-CMD
        if [ -e #{fobj} ]; then rm -f #{fobj}; fi;
        rm -f #{previous_release}/config/#{fobj};
        ln -s #{vormetric_path}/#{application}/#{link} #{fobj};
      CMD
    end

    #Bundler GEM Installation Symlink 
    shared_bundler_dir = File.join(shared_path, 'bundle')
    release_bundler_dir = File.join(current_release, 'vendor/bundle')
    run "ln -s #{shared_bundler_dir} #{release_bundler_dir}"
  end

  desc "Assets Pre-Compilation"
  task :assets_precompile, :roles => :app do
    run "cd #{current_release} && RAILS_ENV=#{rails_env} bundle exec rake assets:precompile"
  end

  desc "Miscellaneous Tasks"
  task :miscellaneous, :roles => :app do
    run "chmod -f +w #{current_release}/db/schema.rb"
  end
end

这是特定于盒子的部署脚本 myhostname.rb:

服务器 "myhostname", :app, :web, :db, :primary => true

set :deploy_to, "/opt/web/var/myapp"
set :rails_env, "customertest"
set :branch, "staging"

现在远程盒子无法访问互联网,但我的所有宝石都存储在供应商/缓存下。所以它应该从那里拿起。(供应商/缓存在远程服务器上的 /myapp/current/vendor/cache 下有 nokigiri)

当我跑步时

cap 部署服务器名称

,我收到以下错误:

 ** [out :: myhost] An error occurred while installing nokogiri (1.5.9), and Bundler cannot
 ** [out :: myhost] continue.
 ** [out :: myhost] Make sure that `gem install nokogiri -v '1.5.9'` succeeds before bundling.

我应该部署代码的远程盒子设置了以下文件夹:

 /opt/web/var/myapp
 /opt/web/var/myapp/current(where all the code is cloned currently)
 /opt/web/var/myapp/releases
 /opt/web/var/myapp/shared

我不确定我应该如何获取和安装 gem。

【问题讨论】:

  • 错误应该比这三行更多。你能告诉我们完整的错误输出吗?

标签: ruby-on-rails ruby ruby-on-rails-3 capistrano


【解决方案1】:

来自 bundler 文档的这句话可能是相关的(强调我的):

http://bundler.io/v1.9/bundle_package.html

默认情况下,如果您在运行 bundle package 后简单地运行 bundle install,Bundler 仍将连接到 ruby​​gems.org 以检查是否存在 特定于平台的 gem供应商/缓存中的宝石。 这种行为可以通过运行 bundle install --local 来避免。请注意,这要求您为所有已缓存的 gem 提供正确的平台版本。实现这一点的最简单方法是在同一台机器上运行 bundle 包,然后签入那些供应商的 gem。

因此,简而言之,您需要在生产服务器中运行 bundler 时传递 --local 标志,以避免完全连接到 ruby​​gems。

capistrano 一起使用的解决方案是在您的deploy.rb 文件中设置此变量:

# deployment and quiet are used by default, we add the local flag
set :bundle_flags, "--deployment --quiet --local" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    相关资源
    最近更新 更多