【问题标题】:Deployment of Rails 3 App using Bundler and Capistrano使用 Bundler 和 Capistrano 部署 Rails 3 应用程序
【发布时间】:2011-03-31 12:23:08
【问题描述】:

在 Rails3 应用程序的 capistrano 部署期间,我希望我的服务器在每次部署时使用 Gemfile.lock 安装 gem。而且由于我的服务器没有 rvm 和所有..所有 gem 都应该作为系统 gem 安装。

要安装系统gem,我们需要将sudo gem install anygem 或对于bunder,我们需要在capistrano 部署结构的current 目录中给出命令sudo bundle install

每次部署时,我的部署都会在 gems 安装过程中中断。我需要sudo bundle install 才能运行。为此,我需要一个 capistrano 的部署挂钩。 bundler gem 本身提供的预构建的对我不起作用。我的困惑归结为这三个问题。

  1. 我应该何时在部署过程中调用 sudo bundle install 命令 - 我的意思是在哪个 capistrano 任务之后?

  2. 为了使用 capistrano 运行 sudo 命令,我应该在我的 cap 文件中指定哪些声明?注意 - 我已经将我的公钥作为授权密钥推送到我的服务器中。

  3. bundle install hook应该怎么写在cap文件里?

请帮忙。

【问题讨论】:

  • 强烈建议您在生产中使用 rvm,它消除了所有的 sudo 混乱
  • @SamSaffron,有宝石 - 是的。但是如果你使用上帝,你又回到了 sudo mess 。 :-)

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


【解决方案1】:

require "bundler/capistrano" 添加到您的deploy.rb 应该就可以了。它应该声明一个用于安装 gem 的文件夹,不需要 sudo 访问,不管 rvm。

这对你来说仍然失败吗?

【讨论】:

    【解决方案2】:

    如果您运行 bundle install --deployment,则不需要 sudo 访问权限,因为 gem 应该安装到应用程序中的供应商/捆绑包而不是系统本身。

    【讨论】:

      【解决方案3】:

      我在 deploy.rb 中使用它:

      require "bundler/capistrano"
      ... deploy recipe
      
      namespace :bundle do
        desc "Install bundles into application"
        task :install, :roles => [:app] do
          run "cd #{current_path} && LC_ALL='en_US.UTF-8' bundle install --deployment --without test"
        end
      end
      

      然后在正常部署后我运行“cap bundle:install”

      注意:使用 UTF-8 防止 ruby​​1.9 ASCII 字符问题。

      【讨论】:

        猜你喜欢
        • 2019-08-30
        • 1970-01-01
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-10
        • 1970-01-01
        相关资源
        最近更新 更多