0

サーバーで多段階展開を行おうとしていますが、ステージング構成と運用構成を実行するのに問題があります。

サーバー: Ubuntu 11.10 (GNU/Linux 3.0.0-19-server x86_64)

これが私がこれまでに行ったことです:

  1. ローカル マシンに form_tester という名前の新しいプロジェクトを作成しました。ローカルで sqlite3 を使用した単純なデータベースを使用しています。ステージングとプロダクションの両方で mysql2 を使用したいと考えています。

  2. サーバー上のステージングおよび本番用のディレクトリをセットアップします。

    /home/username/form_tester/staging
    /home/username/form_tester/production
    
  3. サーバー上にステージング用と本番用の 2 つのデータベースを作成しました。また、テーブルを生成できるため、適切な権限を持つユーザーがアクセスできるように構成しました。

    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 ファイルからすべてを削除しました。キャップファイルを放っておいた。

  7. deploy ディレクトリを作成し、2 つのファイルを作成しました。

    config/deploy/production.rb
    config/deploy/staging.rb
    
  8. 構成に関する次の詳細を追加しました。

config/deploy/production.rb の場合:

    server "server.com", :app, :web, :db, :primary => true
    set :deploy_to, "/home/username/form_tester/production"
    set :rails_env, "production"

config/deploy/staging.rb の場合:

    server "server.com", :app, :web, :db, :primary => true
    set :deploy_to, "/home/username/form_tester/staging"
    set :rails_env, "staging"

config/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. git --bare init を使用してサーバー上の git リポジトリを初期化し、現在のユーザー名のディレクトリに適切にアクセスできることを確認しました。


10.開発マシンで git リポジトリを初期化し、ファイルをssh://username@server.com/home/username/git/form_tester.gitのサーバー リポジトリにプッシュしました。

11.ローカル マシンからサーバー上のステージングへの展開を開始します。次のすべてのコマンドをエラーなしで実行します。

/home/username/form_tester/staging の下にディレクトリ ツリーを構築するには

    $ 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されています

12. /var/www/staging からアプリケーションのパブリック ディレクトリへのシンボリック リンクを作成しました。

    /home/username/form_tester/staging/current/public.

    $ sudo ln -s /home/username/form_tester/staging/current/public /var/www/staging

13. /etc/apache2/sites-available/default ファイルを変更して、ステージング アプリのサブ URI を追加しました。

    $ sudo vi /etc/apache2/sites-available/default

    …
            RailsBaseURI /staging
            <Directory /var/www/staging>
                    Options -MultiViews
            </Directory>
    …

14.この時点で (ローカルで) cap deploy:restart を実行すると、エラーがないため、サーバーが再起動されたように見えます。(サーバーにログイン) Sudo service apache2 restart も試しましたが、サーバーも正常に再起動します。

15.この時点で、server.com/staging という URL を取得しましたが、アプリが表示されません。

その他のファイル:

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

config/environments/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 パッセンジャーを除いて ruby​​ 関連のものは何も表示されていないようですが、エラーではありません。

    [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 schema:db:load を実行すると、データベース用に適切にテーブルが構築されているように見えますが、実際には development.sqlite3 ファイル用に構築されています。

  2. Rails コンソールを開いて Rails.env を実行すると、環境として「staging」が表示されます。

  3. これはおそらく#1に関連しています.rake db:seedは、サーバー上のmysqlで「ftstaging」と呼ばれるデータベースを実行してもいっぱいにならないようです。

  4. cap deploy は cap deploy:update と何も変わらないようです。

  5. 最終結果は、server.com/staging に「申し訳ありませんが、問題が発生しました」というページが表示されます。

  6. 私の中には何も表示されていないようです

  7. rake about を実行すると、まだ開発モードにあることがわかります。

    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
    

次のチュートリアルを試してみましたが、ほとんど運がありませんでした。

質問:

展開プロセスを内外で理解している人がいると確信していますが、何が欠けていますか? 何を確認すればよいですか?ここで示したことから、他に何ができるでしょうか?

この時点で、どんな助けも大歓迎です。私はこの問題に 2 日間取り組んできましたが、何が間違っているのか、他に何を試せばよいのかわかりません。私は約 3 週間前に Rails を使い始めたばかりですが、私のフラストレーションのほとんどは、デプロイのプロセスの明確な説明を見つけることができなかったことによるものです。この問題を明確にし、その見返りとして、他の人がアイデアから多段階展開を簡単に行えるように支援したいと考えています.

別の注意として、なぜ誰かがこの投稿に「反対票を投じる」のでしょうか? それを裏付ける情報とともに正当な質問をしています。よくない質問なら理由を教えてください。ありがとう


11/1/12 - 更新:

アプリを「ステージング」環境に入れる方法を見つけましたが、まだ server.com/staging に読み込まれません。

「Rails.env = ActiveSupport::StringInquirer.new('staging')」を config/application.rb ファイルに追加しましたが、これが環境を強制する理由がわかりません。これは正しい方法ですか?

次に、デプロイし、サーバーにユーザー名として SSH 接続し、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
4

1 に答える 1

0

私は最終的に、主な問題であるアセット パイプラインを発見しました。

最初の問題: Capfile から次の行のコメントを外しませんでした

load 'deploy/assets'

2 番目の問題:アセットをコンパイルしたことはありません (開発マシンまたはサーバー側で。大きなおっと!)

$ bundle exec rake assets:precompile

参考文献

ご存知の方へのフォローアップの質問: アセットをコンパイルすると、ステージングではなく RAILS_ENV=production と表示されることに気付きました。staging.rb ファイルを作成するときは、基本的に production.rb ファイルをコピーしました。それが生産を言っていることと関係があるかどうかはわかりません。

これは期待されていますか?

/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby /usr/local/rvm/gems/ruby-1.9.3-p194@global/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
于 2012-11-03T02:47:50.757 に答える