我正試圖在服務器上獲得多級部署,並且無法運行臨時和生產配置。在Ubuntu 11.10上執行rails multistage部署時遇到問題
服務器:Ubuntu的11.10(GNU/Linux的3.0.0-19服務器x86_64的)
這是我迄今所做的:
我創建了一個名爲form_tester新的項目上我本地機器。我在本地使用sqlite3的簡單數據庫。我希望在分段和生產中使用mysql2。
在服務器上設置登臺和生產目錄。
/home/username/form_tester/staging /home/username/form_tester/production
在服務器上製作兩個數據庫用於分段和生產。我還將它們配置爲具有正確特權的用戶訪問,因爲我能夠在其中生成表格。
ftstaging ftproduction
配置config/database.yml文件進行登臺和生產。
staging: adapter: mysql2 encoding: utf8 reconnect: false database: ftstaging pool: 5 username: dbuser password: pass host: server.com production: adapter: mysql2 encoding: utf8 reconnect: false database: ftproduction pool: 5 username: dbusr password: pass host: server.com
爲分段和生產配置Gemfile。
源 'https://rubygems.org'
gem 'rails', '3.2.8' gem 'jquery-rails' gem 'capistrano' group :development do gem 'sqlite3' end group :staging do gem 'activerecord-mysql2-adapter' gem 'mysql2' end group :production do gem 'activerecord-mysql2-adapter' gem 'mysql2' end # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' gem 'uglifier', '>= 1.0.3' end
冉Capify得到部署文件。刪除deploy.rb文件中的所有內容。單獨留下Capfile。
創建部署目錄並創建兩個文件。
config/deploy/production.rb config/deploy/staging.rb
添加以下細節進行配置:
對於配置/部署/ production.rb:
server "server.com", :app, :web, :db, :primary => true
set :deploy_to, "/home/username/form_tester/production"
set :rails_env, "production"
對於配置/部署/ staging.rb:
server "server.com", :app, :web, :db, :primary => true
set :deploy_to, "/home/username/form_tester/staging"
set :rails_env, "staging"
對於配置/ deploy.rb:服務器
set :stages, ['production', 'staging']
set :default_stage, 'staging'
require 'capistrano/ext/multistage'
# Set application name
set :application, 'form_tester'
set :domain, 'server.com'
set :user, 'username'
# Use Git source control
set :scm, :git
set :repository, "ssh://#{user}@#{domain}/home/#{user}/git/#{application}.git"
set :branch, 'master'
set :deploy_via, :remote_cache
set :scm_verbose, true
default_run_options[:pty] = true
set :use_sudo, false
namespace :deploy do
task :start do ; end
task :stop do ; end
desc "Restart application"
task :restart, :roles => :app, :except => { :no_release => true } do
run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
end
end
9.Initialized混帳回購協議與GIT --bare初始化,並確保我對該目錄適當的訪問當前用戶名。
10.在開發機器上初始化git回購並將文件推送到服務器回購站
ssh://[email protected]/home/username/git/form_tester.git。
11.開始從本地計算機部署到在服務器上進行登臺。我沒有錯誤地運行以下所有命令。
要建立在/ home /用戶名目錄樹/ form_tester /分期
$ cap deploy:setup
$ cap deploy:check
$ cap deploy:update
*ssh'ed into my server*
$ rake schema:db:load
$ rake db:seed
$ rails console
> app.get('/')
I get a '200' returned
> exit
仍然ssh'ed到我的服務器
12.I製成一個符號鏈接的/ var/www /登臺到我的應用程序的公共目錄
/home/username/form_tester/staging/current/public.
$ sudo ln -s /home/username/form_tester/staging/current/public /var/www/staging
13.修改/ etc/apache2/site s-available/default文件來爲分段程序添加一個subURI。
$ sudo vi /etc/apache2/sites-available/default
…
RailsBaseURI /staging
<Directory /var/www/staging>
Options -MultiViews
</Directory>
…
14.在這一點上(本地)我運行cap deploy:restart,它似乎重新啓動服務器,因爲沒有錯誤。 (登錄到服務器)我也嘗試sudo服務apache2重新啓動,這也重新啓動服務器罰款。
15.在這一點上,我拉起url server.com/staging,但沒有看到我的應用程序。
其他文件:
的config/application.rb中:
require File.expand_path('../boot', __FILE__)
require 'rails/all'
if defined?(Bundler)
Bundler.require(*Rails.groups(:assets => %w(development test)))
end
module FormTester
class Application < Rails::Application
config.encoding = "utf-8"
config.filter_parameters += [:password]
config.active_support.escape_html_entities_in_json = true
config.active_record.whitelist_attributes = true
config.assets.enabled = true
config.assets.version = '1.0'
end
end
配置/環境/ staging.rb和production.rb
FormTester::Application.configure do
config.cache_classes = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
end
/var/log/apache2/error.log
好像有相關的展示在這裏,除了PHUSION乘客沒有紅寶石,但它不是一個錯誤。
[Thu Nov 01 01:16:11 2012] [notice] caught SIGTERM, shutting down
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/gd.so' - /usr/lib/php5/20090626/gd.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/mcrypt.so' - /usr/lib/php5/20090626/mcrypt.so: cannot open shared object file: No such file or directory in Unknown on line 0
[Thu Nov 01 01:16:12 2012] [notice] Apache/2.2.20 (Ubuntu) DAV/2 SVN/1.6.12 PHP/5.3.6-13ubuntu3.7 with Suhosin-Patch Phusion_Passenger/3.0.17 configured -- resuming normal operations
[Thu Nov 01 01:16:20 2012] [error] [client 68.6.38.254] File does not exist: /var/www/favicon.ico
[Thu Nov 01 01:16:22 2012] [error] [client 68.6.38.254] File does not exist: /var/www/favicon.ico
[Thu Nov 01 01:23:07 2012] [error] [client 68.6.38.254] File does not exist: /var/www/favicon.ico
觀察:
運行rake模式:DB:負載似乎正確地構建表我的數據庫,但它的實際構建他們的development.sqlite3文件。
如果我打開rails控制檯並運行Rails.env,我會得到「暫存」作爲環境。
這很可能與#1綁定,rake db:seed似乎並不能填充我的數據庫,即使在服務器上的mysql中使用「ftstaging」,即使它執行。
cap部署似乎沒有做任何不同於cap部署:更新。
最終結果是server.com/staging上的一個頁面,上面寫着「我們很抱歉,但出了問題。「
似乎沒有在我的
約顯示,我仍然在開發模式下運行耙出什麼是。
About your application's environment Ruby version 1.9.3 (x86_64-linux) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.8 JavaScript Runtime Node.js (V8) Active Record version 3.2.8 Action Pack version 3.2.8 Active Resource version 3.2.8 Action Mailer version 3.2.8 Active Support version 3.2.8 Middleware ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x00000002796948>, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::RemoteIp, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::ConnectionAdapters::ConnectionManagement, ActiveRecord::QueryCache, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ParamsParser, ActionDispatch::Head, Rack::ConditionalGet, Rack::ETag, ActionDispatch::BestStandardsSupport Application root /home/username/form_tester/staging/releases/20121101080752 Environment development Database adapter sqlite3 Database schema version 20121030011807
我曾嘗試以下教程有點運氣:
- https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension 個
- http://trevmex.com/post/367574671/steps-for-setting-up-a-capistrano-multistage-deployment
- http://cjohansen.no/en/apache/multi_staging_environment_for_rails_using_capistrano_and_mod_rails
- http://guides.beanstalkapp.com/deployments/deploy-with-capistrano.html#prepare-project
問題:
我敢肯定有一個人在那裏,瞭解部署過程和退出,我缺少什麼? 我應該檢查什麼? 從我在這裏展示的內容來看,我能做些什麼改變?
在這一點上,任何幫助非常感謝。我一直在解決這個問題兩天了,不知道我做錯了什麼,也不知道還有什麼可以嘗試的。大約三個星期前我剛開始使用rails,我的大部分挫折都是由於無法找到部署過程的明確描述。我希望在這個問題上獲得清晰的結果,並且幫助他人輕鬆地從想法到多級部署。
另一方面,爲什麼有人會「投票」這個職位?我正在問一個有關信息的合法問題來備份它。如果這不是一個好問題,請告訴我爲什麼。由於
12年11月1日 - 更新:
我想通了,如何讓我的應用程序進入「升級」的環境,但它仍然無法在server.com/staging加載。
我在我的config/application.rb文件中添加了「Rails.env = ActiveSupport :: StringInquirer.new('staging')」,但我不知道爲什麼這會強制環境。這是做到這一點的正確方法嗎?
然後我部署,ssh'ed到我的服務器作爲用戶名,並運行rake db:migrate和rake db:seed。我現在看到我的數據庫已填充。
還有什麼可以進行?我的環境/ staging.rb文件有問題嗎?
/etc/apache2/httpd。CONF
ServerName server.com
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.17/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.17
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby
沒有答案給你,此刻,對不起。一些觀點:capistrano命令應該是'cap blah'例如'cap staging deploy:setup'。當在目標服務器上時,我建議運行RAILS_ENV = staging前綴的任何rake命令,例如'RAILS_ENV =登臺rake db:seed'。你提到乘客 - 這是否正確配置了'PassengerRoot'和'PassengerRuby'等?部署目錄下的日誌目錄中是否有任何日誌用於登臺? –
mccannf
我沒有注意到使用cap staging deploy的區別:安裝與cap deploy:setup。我在我的deploy.rb文件中設置了set:default_stage,'staging'。另外,當我運行任何命令RAILS_ENV =之前耙...升級... 我會看看PassengerRoot和PassengerRuby和日誌。 – rjd
我把我的httpd.conf文件的內容放在上面。這些是安裝到的默認PassengerRoot和PassengerRuby位置,這對我的安裝是正確的。 – rjd