0

我正在尝试部署我的 rails 应用程序,直到现在 hostet 在 Heroku,现在在 DigitalOcean 使用 Capistrano。我创建了一个“1-Click-Rails-Application”,它创建了一个空白的 Rails 应用程序,所以当我在我的网络浏览器中打开远程服务器时,会显示典型的 Rails 欢迎屏幕 (index.html)。当我 ssh 到远程目录时,rails 应用程序的路径是:

/home/rails/

rails 目录内部是典型的 rails 文件夹,例如控制器等。所以我认为正确的 deploy_to 路径应该是:

set :deploy_to, "/home/rails/"

我已经看到了很多不同的目录建议,我真的不知道什么是正确的。我有

set :deploy_to, "var/www/#{application}"

同样,这似乎也不起作用。

我很高兴我已经成功地将我的本地应用程序上传到新的 vpn 服务器而没有任何错误。我想避免使用 git repo 来节省私人 git repo 的额外成本并直接从我的计算机推送它。问题是,经过

cap production deploy:cold

它做了很多并且没有任何错误地运行,似乎没有上传任何东西。至少我在服务器上找不到任何“我的”文件。好吧,我真的很高兴能走到这一步,但不明白为什么我的配置不起作用。我希望有人能帮帮忙。这是配置目录中的 deploy.rb。(我正在使用 rvm。)

require 'capistrano/ext/multistage'
require "bundler/capistrano"
require "rvm/capistrano"

set :application, "myApp"
set :user, "root"
set :port, 22
set :deploy_to, "home/rails/"
set :repository, "."
set :scm, :none 
set :deploy_via, :copy
set :checkout, :export
set :use_sudo, false
#set :rvm_ruby_string, "ruby-2.0.0p195@#{application}"
set :rvm_type, :user
set :rvm_type, :system
server "xx.xxx.xx.xx", :app, :web, :db, :primary => true

after "deploy", "deploy:migrate"

我正在使用 Rails 3.2.13 和 Ruby 2.0.0。非常感谢!

更新: 我最初是按照 railscast capistrano 部署教程来解决这个问题的。因此,我在 config 文件夹中创建了 deploy 文件夹,里面有一个 production.rb 和一个 staging.rb。

长话短说,我在服务器上的 var/www/xx.xxx.xx.xx/current/ 目录中找到了“我的”rails 应用程序。路径在 production.rb 中指定,如下所示:

server "xx.xxx.xx.xx", :app, :web, :db, :primary => true
set :deploy_to, "/var/www/xx.xxx.xx.xx"

我现在可以将上面的路径更改为 /home/rails,但实际的 rails 应用程序位于名为 current 的附加文件夹中。我如何编写路径以便没有当前目录?至少不在那里?

4

2 回答 2

3
set :deploy_to, "home/rails/"

正确的方法是:

set :deploy_to, "/home/rails/"

对于var路径:

set :deploy_to, "/var/www/#{application}"
于 2013-08-13T18:28:30.560 回答
1

我使用最新版本的 Capistrano 进行了此操作:3.2.1 和 3.1.0 也许这已在补丁中修复?

以下是我文件的相关部分:

宝石文件:

group :development do
  gem 'capistrano-rails'
end

帽文件:

require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }

配置/部署.rb

set :deploy_to, '/var/www/wrong_stage_folder'
# make sure this value is ignored.

配置/部署/staging.rb

set :deploy_to, '/var/www/appname_stage'

配置/部署/production.rb

set :deploy_to, '/var/www/appname_prod'

运行检查:cap staging deploy:check --trace

INFO [2618043b] Running /usr/bin/env mkdir -pv /var/www/appname_stage/shared /var/www/appname_stage/releases on example.server.com

按预期工作,与生产相同。

于 2014-05-12T12:01:01.137 回答