2012-11-01 139 views
0

我正試圖在服務器上獲得多級部署,並且無法運行臨時和生產配置。在Ubuntu 11.10上執行rails multistage部署時遇到問題

服務器:Ubuntu的11.10(GNU/Linux的3.0.0-19服務器x86_64的)

這是我迄今所做的:

  1. 我創建了一個名爲form_tester新的項目上我本地機器。我在本地使用sqlite3的簡單數據庫。我希望在分段和生產中使用mysql2。

  2. 在服務器上設置登臺和生產目錄。

    /home/username/form_tester/staging 
    /home/username/form_tester/production 
    
  3. 在服務器上製作兩個數據庫用於分段和生產。我還將它們配置爲具有正確特權的用戶訪問,因爲我能夠在其中生成表格。

    ftstaging 
    ftproduction 
    
  4. 配置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 
    
  5. 爲分段和生產配置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 
    
  6. 冉Capify得到部署文件。刪除deploy.rb文件中的所有內容。單獨留下Capfile。

  7. 創建部署目錄並創建兩個文件。

    config/deploy/production.rb 
    config/deploy/staging.rb 
    
  8. 添加以下細節進行配置:

對於配置/部署/ 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 

觀察:

  1. 運行rake模式:DB:負載似乎正確地構建表我的數據庫,但它的實際構建他們的development.sqlite3文件。

  2. 如果我打開rails控制檯並運行Rails.env,我會得到「暫存」作爲環境。

  3. 這很可能與#1綁定,rake db:seed似乎並不能填充我的數據庫,即使在服務器上的mysql中使用「ftstaging」,即使它執行。

  4. cap部署似乎沒有做任何不同於cap部署:更新。

  5. 最終結果是server.com/staging上的一個頁面,上面寫着「我們很抱歉,但出了問題。「

  6. 似乎沒有在我的

  7. 約顯示,我仍然在開發模式下運行耙出什麼是。

    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 
    

我曾嘗試以下教程有點運氣:

問題:

我敢肯定有一個人在那裏,瞭解部署過程和退出,我缺少什麼? 我應該檢查什麼? 從我在這裏展示的內容來看,我能做些什麼改變?

在這一點上,任何幫助非常感謝。我一直在解決這個問題兩天了,不知道我做錯了什麼,也不知道還有什麼可以嘗試的。大約三個星期前我剛開始使用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 
+0

沒有答案給你,此刻,對不起。一些觀點:capistrano命令應該是'cap blah'例如'cap staging deploy:setup'。當在目標服務器上時,我建議運行RAILS_ENV = staging前綴的任何rake命令,例如'RAILS_ENV =登臺rake db:seed'。你提到乘客 - 這是否正確配置了'PassengerRoot'和'PassengerRuby'等?部署目錄下的日誌目錄中是否有任何日誌用於登臺? – mccannf

+0

我沒有注意到使用cap staging deploy的區別:安裝與cap deploy:setup。我在我的deploy.rb文件中設置了set:default_stage,'staging'。另外,當我運行任何命令RAILS_ENV =之前耙...升級... 我會看看PassengerRoot和PassengerRuby和日誌。 – rjd

+0

我把我的httpd.conf文件的內容放在上面。這些是安裝到的默認PassengerRoot和PassengerRuby位置,這對我的安裝是正確的。 – rjd

回答

0

我終於發現了首要問題:資產管道

第一個問題:我沒有去掉下面行的形成Capfile

load 'deploy/assets' 

AND

秒ond問題:我從來沒有編譯資產(在開發機器或服務器端。大哎呦)

$ bundle exec rake assets:precompile 

參考

後續問題的人誰知道: 我注意到,當我編制的資產它說RAILS_ENV = produ而不是分期。在製作staging.rb文件時,我基本上覆制了production.rb文件。我不確定這是否與生產有關。

這是預期嗎?

/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby /usr/local/rvm/gems/[email protected]/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets 
相關問題