Rails 3.0.3 と RefineryCMS 0.9.9 で構築されたサイトにいくつかの変更を加えるために雇われました。私は Rails と Capistrano を初めて使用するので、ツールの操作のコツをつかむためにサイトへのテスト デプロイを試みました。サイトの本番バージョンをダウンロードして、再デプロイしようとしました。config/deploy.rb ファイルのいくつかを変更しただけで、Gemfile や db の依存関係は何も変更しませんでした。github を使用してデプロイしようとしましたが、ssh キーに問題があったため、独自のコピーを使用してデプロイしました。サーバーに必要なすべての権限を変更すると、展開が機能しました。しかし、サイトはそうではありませんでした。ホームページのタイトルは
Ruby (Rack) application could not be started
These are the possible causes:
There may be a syntax error in the application's code. Please check for such errors and fix them.
A required library may not installed. Please install all libraries that this application requires.
The application may not be properly configured. Please check whether all configuration files are written correctly, fix any incorrect configurations, and restart this application.
A service that the application relies on (such as the database server or the Ferret search engine server) may not have been started. Please start that service.
そのため、「cap deploy:rollback」と入力して、以前の適切なバージョンを取得しました。しかし、ログインすると、ダッシュボードが表示される場所に 500.hmtl ページが表示されます。サイトにログインしているようですが、ダッシュボードがありません!
サーバー ホストは、典型的な nginx/0.8.53 + Phusion Passenger 3.0.2 (mod_rails/mod_rack) です。エラー ログが無効になっているため、何も見つかりません。
以下は、私が使用した deploy.rb です。
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
#require "rvm/capistrano" # Load RVM's capistrano plugin.
#set :rvm_ruby_string, '1.9.2' # Or whatever env you want it to run in.
#set :rvm_type, :user
#require "bundler/capistrano"
set :application, "xxxxx"
#set :repository "ssh://hg@bitbucket.org/xxxx/xxxxx"
#set :repository, "ssh://git@bitbucket.org/xxxx/xxxxx.git"
set :repository, "git@github.com:xxxx/xxxxx.git"
set :scm, :git
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`
set :scm_username, 'xxxx'
set :scm_password, proc{Capistrano::CLI.password_prompt('git pass:')}
role :web, "www.xxxxx.gr" # Your HTTP server, Apache/etc
role :app, "www.xxxxx.gr" # This may be the same as your `Web` server
role :db, "www.xxxxx.gr", :primary => true # This is where Rails migrations will run
# If you are using Passenger mod_rails uncomment this:
# if you're still using the script/reapear helper you will need
# these http://github.com/rails/irs_process_scripts
set :deploy_to, "/var/www/#{application}"
set :deploy_via, :copy #:remote_cache #:copy
set :keep_releases, 5
set :user, "xxxx"
set :use_sudo, true
# before "deploy:bundle_install", "deploy:install_bundler"
# after "deploy:update_code", "deploy:bundle_install"
after "deploy:update_code", "deploy:remove_packaged_assets"
after "deploy:update_code", "deploy:symlink_assets"
#after "deploy:symlink", "deploy:update_crontab"
namespace :deploy do
task :start do ; end
task :stop do ; end
desc "Symlink shared folders on each release."
task :symlink_assets do
run "ln -nfs #{shared_path}/system #{release_path}/public/system"
end
desc "Remove packaged assets"
task :remove_packaged_assets, :roles => :web do
run "rm -f #{current_path}/public/javascripts/all.js"
run "rm -f #{current_path}/public/stylesheets/all.css"
end
# desc "installs Bundler if it is not already installed"
# task :install_bundler, :roles => :app do
# sudo "sh -c 'if [ -z `which bundle` ]; then echo Installing Bundler; sudo gem install bundler; fi'"
# end
#
# desc "run 'bundle install' to install Bundler's packaged gems for the current deploy"
# task :bundle_install, :roles => :app do
# run "cd #{current_path} && bundle install"
# end
desc "Update the crontab file"
task :update_crontab, :roles => :app, :except => { :no_release => true } do
run "cd #{release_path} && bundle exec whenever --update-crontab #{application}"
end
task :restart, :roles => :app, :except => { :no_release => true } do
run "touch #{File.join(current_path,'tmp','restart.txt')}"
end
end