У меня есть приложение rails 4, которое я пытаюсь развернуть на webfaction. Приложение находится на битбакете. Кроме того, в соответствии с документами webfaction приложение должно быть развернуто в пути «/ home/username/webapps/app». У меня есть вся моя настройка database.yml (для всех envs) в secrets.yml, которая была скопирована в shared_path/config.Развертывание приложений Rails 4 с использованием mina на webfaction
В соответствии с указанной в документации http://docs.webfaction.com/software/rails.html должны быть заданы некоторые переменные среды. Webfaction вам нужно установить переменные env, которые будут уничтожены после завершения сеанса ssh. Я попытался установить их в задаче set_env_variables.
структура каталога как:
$ pwd
/home/username/webapps/appname
$ ls
bin gems hello_world lib nginx releases scm shared src tmp
$ls gems/
bin build_info cache doc extensions gems specifications
$ ls gems/gems/
actionmailer-4.1.8 bundler-1.7.9 jbuilder-2.2.5 rack-test-0.6.2 sass-rails-4.0.5 tilt-1.4.1 ...
$ cd hello_world/
[hello_world]$ bundle
-bash: bundle: command not found
$ cd ..
$ pwd
/home/username/webapps/appname
$ export PATH=$PWD/bin:$PATH
$ export GEM_HOME=$PWD/gems
$ export RUBYLIB=$PWD/lib
$ cd hello_world/
$ bundle
Using rake 10.4.2
...
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
Он указывает, что нам нужно установить переменные окр.
Здесь 'hello_world' представляет собой пример рельсов, созданный webfaction. Я бы удалил его. Также предусмотрены nginx-пассажиры. Мой сценарий развертывания в
require 'mina/bundler'
require 'mina/rails'
require 'mina/git'
set :domain, 'webabc.webfaction.com'
set :deploy_to, '/home/username/webapps/appname'
set :repository, '[email protected]:username/appname.git'
set :branch, 'master'
set :shared_paths, ['config/secrets.yml', 'log', 'tmp']
set :user, 'ssh-username' # Username in the server to SSH to.
task :environment do
end
task :setup => :environment do
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/tmp"]
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/tmp"]
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/log"]
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/log"]
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/config"]
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/config"]
queue! %[touch "#{deploy_to}/#{shared_path}/config/secrets.yml"]
queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/secrets.yml'."]
end
desc "Deploys the current version to the server."
task :deploy => :environment do
deploy do
invoke :'set_env_variables'
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
invoke :'rails:db_migrate'
invoke :'rails:assets_precompile'
invoke :'deploy:cleanup'
to :launch do
queue "mkdir -p #{deploy_to}/#{current_path}/tmp/"
queue "touch #{deploy_to}/#{current_path}/tmp/restart.txt"
invoke :restart
end
end
end
desc "Set the environment variables."
task :set_env_variables => :environment do
queue! "cd /home/username/webapps/appname"
queue! "export GEM_HOME=$PWD/gems"
queue! "export RUBYLIB=$PWD/lib"
queue! "export PATH=$PWD/bin:$PATH"
queue! "export LD_LIBRARY_PATH=$HOME/lib/"
end
Когда я 'Mina развернуть --verbose --trace', я получаю
** Invoke deploy (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute deploy
** Invoke set_env_variables (first_time)
** Invoke environment
** Execute set_env_variables
** Invoke git:clone (first_time)
** Execute git:clone
** Invoke deploy:link_shared_paths (first_time)
** Execute deploy:link_shared_paths
** Invoke bundle:install (first_time)
** Execute bundle:install
** Invoke rails:db_migrate (first_time)
** Execute rails:db_migrate
** Invoke rails:assets_precompile (first_time)
** Execute rails:assets_precompile
** Invoke deploy:cleanup (first_time)
** Execute deploy:cleanup
** Invoke restart (first_time)
** Invoke environment
** Execute restart
-----> Creating a temporary build path
$ touch "deploy.lock"
$ mkdir -p "$build_path"
$ cd "$build_path"
Setting environment variables
$ cd /home/username/webapps/appname
$ export GEM_HOME=$PWD/gems
$ export RUBYLIB=$PWD/lib
$ export PATH=$PWD/bin:$PATH
$ export LD_LIBRARY_PATH=$HOME/lib/
-----> Fetching new git commits
$ (cd "/home/username/webapps/appname/scm" && git fetch "[email protected]:username/appname.git" "master:master" --force)
-----> Using git branch 'master'
$ git clone "/home/username/webapps/appname/scm" . --recursive --br Cloning into '.'...
$ git clone "/home/username/webapps/appname/scm" . --recursive --branch "master"
done.
-----> Using this git commit
$ git --no-pager log --format='%aN (%h):%n> %s' -n 1
Prasad Surase (ce1654d):
> Some git commit message
$ rm -rf .git
-----> Symlinking shared paths
$ mkdir -p "./config"
bash: line 130: bundle: command not found
$ mkdir -p "."
$ rm -rf "./config/secrets.yml"
$ ln -s "/home/username/webapps/appname/shared/config/secrets.yml" "./config/secrets.yml"
$ rm -rf "./log"
$ ln -s "/home/username/webapps/appname/shared/log" "./log"
$ rm -rf "./tmp"
$ ln -s "/home/username/webapps/appname/shared/tmp" "./tmp"
-----> Installing gem dependencies using Bundler
$ mkdir -p "/home/username/webapps/appname/shared/bundle"
$ mkdir -p "./vendor"
$ ln -s "/home/username/webapps/appname/shared/bundle" "./vendor/bundle"
$ bundle install --without development:test --path "./vendor/bundle" --deployment
! ERROR: Deploy failed.
-----> Cleaning up build
$ rm -rf "$build_path"
Unlinking current
$ rm -f "deploy.lock"
OK
! Command failed.
Failed with status 19
Ссылка https://community.webfaction.com/questions/5186/capistrano-cant-find-bundle определяет решение для сценария развертывания Capistrano. Как я могу исправить это для мины?
@Yoeran с вашей конфигурацией все работает нормально, только проблема, которую сервер продолжает указывать на установку по умолчанию Webfaction (пример:/home/myusername/webapps/myapp/defaultwebfactioninstallationfolder). Я уже изменил конфигурацию nginx, чтобы указать на/главная/MyUserName/WebApps/MyApp/ток. Что, по-вашему, мне не хватает? – albertopriore
@albertopriore Вы должны добавить '/ public' к вашему корню сервера nginx. Таким образом, ваш полный корневой сервер становится: '/ home/USERNAME/webapps/APPNAME/current/public' – Yoeran