2013-10-10 3 views
2

Это мой первый опыт развертывания приложения rails на сервере. Он отлично работает на месте, но когда я пытаюсь переместить его на сервер для производства, он не появляется. Все, что я получаю, это изображения моих проектов. Нужно ли мне вносить какие-либо изменения?Запуск моего приложения rails на сервере

Ниже приведены изменения, которые я уже сделал - database.yml -> Производство изменило окружающую среду

я использовал Phusion пассажир и апач для этой цели. Любой, кто столкнулся с подобной ситуацией, пожалуйста, помогите мне. Любая помощь будет высоко оценена. Заранее спасибо :)

Также на сервере, на котором я пытаюсь работать, есть проекты, работающие на рубине 1.8.7; было два случая, когда в моем проекте использовались гемзеты другого проекта. Так что пришлось использовать .rvmrc (который, как я знаю, устарел на данный момент), чтобы указать его на правильный gemset, который должен использовать мое приложение.

Конфигурация:

<VirtualHost *:80> 
    ServerName cloudapp.net 
    DocumentRoot /var/www/test1/public 
    <Directory /var/www/test1/public> 
    Allow from all 
    Options -MultiViews 
    </Directory> 
</VirtualHost> 

Passenger Конфигурация:

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p448/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so 
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p448/gems/passenger-4.0.20 
PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-1.9.3-p448/ruby 
+0

вы знаете, '.ruby-version',' .ruby-gemset' является заменой для '.rvmrc'? [читать] (http: // rvm.io/workflow/projects # project-file-ruby-version) – Litmus

+0

Я сейчас удалил rvmrc и использовал gemset для проекта, но проблема по-прежнему сохраняется, я не знаю, что еще мне нужно сделать, чтобы запустить ее по производству. –

+0

Во-первых, попробуйте запустить приложение в рабочем режиме на удаленном сервере, используя рельсы, созданные на сервере 'WEBrick', используя сервер rails -e production -p 80'. Как только вы получите «WEBrick» для загрузки без ошибок, переключитесь на apache/пассажир. Вы также должны опубликовать более подробные сообщения об ошибках и соответствующий контент из ваших конфигурационных файлов здесь, чтобы получить справку. – Litmus

ответ

3

Вы следовали каждые шаги?

cap deploy:setup 

cap deploy:cold 

Вы создали символические ссылки? Я буду размещать рабочую демонстрацию моего файла здесь ..

Мой deploy.rb

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

set :user, 'ubuntu' 
set :application, "yourapp" 
set :use_sudo, true 

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
set :rvm_path,   "/home/ubuntu/.rvm" 
set :rvm_bin_path,  "#{rvm_path}/bin" 
set :rvm_lib_path,  "#{rvm_path}/lib" 


set :rvm_ruby_string, 'ruby-1.9.3-p448' 
set :rvm_type, :system 

set :default_environment, { 
    'PATH' => "/home/ubuntu/.rvm/gems/ruby-1.9.3-p448/bin:/home/ubuntu/.rvm/gems/[email protected]/bin:$PATH", 
    'RUBY_VERSION' => 'ruby-1.9.3-p448', 
    'GEM_HOME'  => "/home/ubuntu/.rvm/gems/ruby-1.9.3-p448", 
    'GEM_PATH'  => "/home/ubuntu/.rvm/gems/ruby-1.9.3-p448:/home/ubuntu/.rvm/gems/[email protected]", 
    'BUNDLE_PATH' => "/home/ubuntu/.rvm/gems/ruby-1.9.3-p448:/home/ubuntu/.rvm/gems/[email protected]" # If you are using bundler. 
} 


set :scm, 'git' 
# # repository to be set for gitlab 
set :repository, "[email protected]:ur-repo.git" 


# set :branch, "staging" 


set :git_shallow_clone, 1 
set :deloy_via, :remote_cache 
set :keep_releases, 3 
set :scm_verbose, true 


set :stages, ["staging", "production"] 
set :default_stage, "staging" 

set :migrate_target, :latest 



default_run_options[:pty] = true 
ssh_options[:forward_agent] = false 
ssh_options[:keys] = ["yourfile.pem"] 



after "deploy:create_symlink", "deploy:bundle_install" 

namespace :bundler do 
    task :create_symlink, roles: :app do 
    shared_dir = File.join(shared_path, 'bundle') 
    release_dir = File.join(current_release, '.bundle') 
    run("mkdir -p #{shared_dir} && ln -s #{shared_dir} #{release_dir}") 
    end 

    task :bundle_new_release, roles: :app do 
    bundler.create_symlink 
    run "cd #{release_path} && source $HOME/.bash_profile && bundle install" 
    end 
end 

after 'deploy:finalize_update', 'bundler:bundle_new_release' 
after 'deploy:bundle_install', 'deploy:precompile_application' 
after 'deploy:restart', 'deploy:cleanup' 

И мой staging.rb

set :domain, "yourdomain" 


set :rails_env, "staging" 

# roles (servers) 
role :web, domain 
role :app, domain 
role :db, domain, :primary => true 


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



namespace :deploy do 

    desc "Copy config files" 
    after "deploy:update_code" do 
    run "export RAILS_ENV=staging" 
    run "cp #{shared_path}/config/database.yml #{release_path}/config/" 
    run "cp #{shared_path}/config/environments/staging.rb #{release_path}/config/environments/" 
    run "mkdir -p #{release_path}/public/images/ProfilePics"  
    sudo "chmod -R 0777 #{release_path}/tmp/" 
    sudo "chmod -R 0777 #{release_path}/log/" 
    end 

    task :restart, roles: :app, except: { no_release: true } do 
    run "touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 

    desc 'run bundle install' 
    task :bundle_install, roles: :app do 
    run "cd #{current_path} && bundle install --deployment --path #{shared_path}/bundle" 
    end 

    desc "Reset the database" 
    task :reset do 
    # on_rollback { deploy.db.restore } 
    run "cd #{current_path}; bundle exec rake db:reset RAILS_ENV=staging" 
    end 

    desc "Migrate the database" 
    task :migrate do 
    # on_rollback { deploy.db.restore } 
    run "cd #{current_path}; bundle exec rake db:migrate RAILS_ENV=staging" 
    end 

    task :seed do 
    run "cd #{current_path}; bundle exec rake db:seed RAILS_ENV=staging" 
    end 


    task :precompile_application do 
    run "cd #{current_path}; bundle exec rake assets:precompile RAILS_ENV=staging" 
    end 

end 
+0

Попробуй это, как только я возьмусь за офисную машину. Выглядит хорошо, хотя, должен сделать нужный :) –

+0

Да! Дай мне знать, если ты где-то застрял! :) – Aditya

+0

Те, что (staging.rb & deploy.rb), установленные непосредственно, делая «cap install», имеют другой формат, чем то, о чем вы упоминали. Должен ли я очистить все это и вставить там? –

0

Ваша конфигурация пассажира выглядит хорошо.

Ваш PassengerDefaultRuby указывает на 1.9.3-p448. Почему вы считаете, что используете 1.9.3-p225?

Поскольку вы используете RVM, выполните следующие команды, чтобы найти правильный путь рубинового для пассажира

rvm use 1.9.3 
passenger-config --ruby-command 

Затем используйте вывод команды и добавить эту строку в VirtualHost блоке, чтобы заставить приложение использовать конкретная версия рубина.

PassengerRuby /path/to/ruby/1.9.3/ 

Примечание: Это в дополнение к PassengerDefaultRuby вы уже определили. (See Documentation for PassengerRuby)

Выполнить эту команду, чтобы проверить разрешение папки

passenger-config --root 

Activate Logging and Debugging, чтобы увидеть, что именно пассажир делает

+0

Я отредактировал и разместил новую конфигурацию пассажира, ранее показывал 1.9.3-p125. Также я использую rvm (и сильно зависит от него) для всех проектов. –

Смежные вопросы