Lee*_*ond 5 ruby deployment capistrano ruby-on-rails twitter-bootstrap-rails
hey folks I'm having a bit of an issue trying to deploy my rails 3.2.6 app to production, deploy seems to go fine right up until it gets to precompiling assets here is the error I'm getting:
command finished in 1740ms
* executing "cd /home/deployer/apps/stealthygecko/releases/20120717222341 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
servers: ["xx.xxx.xxx.xxx"]
[xx.xxx.xxx.xxx] executing command
** [out :: xx.xxx.xxx.xxx] rake aborted!
** [out :: xx.xxx.xxx.xxx] no such file to load -- addressable/uri
** [out :: xx.xxx.xxx.xxx]
** [out :: xx.xxx.xxx.xxx] (See full trace by running task with --trace)
command finished in 3131ms
*** [deploy:update_code] rolling back
* executing "rm -rf /home/deployer/apps/stealthygecko/releases/20120717222341; true"
servers: ["xx.xxx.xxx.xxx"]
[xx.xxx.xxx.xxx] executing command
command finished in 786ms
failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.2@stealthygecko_rewrite' -c 'cd /home/deployer/apps/stealthygecko/releases/20120717222341 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile'"
Run Code Online (Sandbox Code Playgroud)
I've tried setting "config.assets.compile = false" to see if this helps but I still get the same error.
here is my deploy script:
server "xx.xxx.xxx.xxx", :web, :app, :db, primary: true
depend :remote, :gem, "bundler", ">=1.1.3"
depend :remote, :gem, "rake", ">=0.9.2.2"
set :application, "stealthygecko"
set :user, :"deployer"
set :deploy_to, "/home/#{user}/apps/#{application}"
set :deploy_via, :remote_cache
set :use_sudo, false
set :scm, :git
set :repository, "git@github.com:StealthyGecko/stealthygecko.git"
set :branch, "master"
default_run_options[:pty] = true
set :ssh_options, {:forward_agent => true}
set :ruby_version, "ruby-1.9.2"
set :gemset_name, "stealthygecko_rewrite"
set :rvm_ruby_gemset, "#{ruby_version}@#{gemset_name}"
set :bundle_without, [:darwin, :development, :test]
require "rvm/capistrano"
load 'deploy/assets'
set :rvm_ruby_string, "#{rvm_ruby_gemset}" # Select the gemset
set :rvm_type, :user # RVM install is in the deploying user's home directory
#
before "deploy:assets:precompile", "bundle:install"
after "deploy", "deploy:cleanup" # keep only the last 5 releases
namespace :deploy do
%w[start stop restart].each do |command|
desc "#{command} unicorn server"
task command, roles: :app, except: {no_release: true} do
run "cd #{deploy_to}/current && /etc/init.d/unicorn_stealthygecko restart"
end
end
task :setup_config, roles: :app do
puts "Symlinking nginx and unicorn configs"
sudo "ln -nfs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}"
sudo "ln -nfs #{current_path}/config/unicorn_init.sh /etc/init.d/unicorn_#{application}"
run "mkdir -p #{shared_path}/config"
put File.read("config/database.example.yml"), "#{shared_path}/config/database.yml"
puts "Now edit the config files in #{shared_path}."
end
after "deploy:setup", "deploy:setup_config"
task :symlink_config, roles: :app do
puts "Symlinking database yml"
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
puts "Database Symlink done!"
end
after "deploy:finalize_update", "deploy:symlink_config"
desc "Make sure local git is in sync with remote."
task :check_revision, roles: :web do
unless `git rev-parse HEAD` == `git rev-parse origin/master`
puts "WARNING: HEAD is not the same as origin/master"
puts "Run `git push` to sync changes."
exit
end
end
before "deploy", "deploy:check_revision"
end
Run Code Online (Sandbox Code Playgroud)
Apologies if its a bit of a mess its cobbled together from various Tutorials I read up on. And here is my Gemfile:
source 'http://rubygems.org'
gem 'rake'
gem 'rails', '3.2.6'
gem 'mysql2'
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'gravtastic'
gem "friendly_id"
gem "rinku", '~>1.2.2', :require => 'rails_rinku'
gem "videawesome"
gem "will_paginate", "~>3.0.3"
gem "tweet-button"
gem "bitly"
gem "sanitize"
gem "newrelic_rpm"
gem 'capistrano'
gem 'rvm-capistrano'
gem "unicorn", "~> 4.2.1"
gem "twitter", "2.2.2"
gem 'instagram', :git => 'git://github.com/StealthyGecko/instagram-ruby-gem-lee.git'
group :assets do
gem 'coffee-script'
gem 'jquery-rails'
gem 'uglifier'
gem 'therubyracer'
gem 'execjs'
gem 'twitter-bootstrap-rails'
end
gem 'rspec-rails', :group => [:test, :development]
group :test do
gem 'sqlite3'
gem 'guard-rspec'
gem 'capybara'
gem 'launchy'
gem 'shoulda', '3.0.0.beta2'
gem 'factory_girl_rails'
gem 'ruby-debug19', :require => 'ruby-debug'
gem 'turn', :require => false
end
Run Code Online (Sandbox Code Playgroud)
I know its a bit of a long shot but if anyone can spot where I'm going wrong or if anyone has come up against this problem and managed to solve it please let me know as I've been banging my head against this problem for a few hours now.
当它失败时,它似乎说"没有这样的文件加载 - 可寻址/ uri"但是我不确定它在哪里使用以及为什么它被用于编译资产
有什么建议?
显然已修复以下内容:http://www.kudelabs.com/2012/03/28/rails-3-2-cap-deploy-with-assets
UPDATE2:查看你的 cap 脚本后,你有before "deploy:assets:precompile", "bundle:install"
尝试删除它并添加:require 'bundler/capistrano'
删除load 'deploy/assets'并将其放入您的 Capfile 中。
更新:查看railsgenerate rspec:install后返回“无法在任何源中找到addressable-2.2.8”和http://addressable.rubyforge.org/api/。
检查你的 Gemfile.lock
Using addressable (X.X.X)
Run Code Online (Sandbox Code Playgroud)
这可能应该是 Gemfile 中其中一个 gem 的依赖项。否则,您可以尝试手动添加。
我有...
...
# 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 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
gem 'twitter-bootstrap-rails'
end
...
Run Code Online (Sandbox Code Playgroud)
在我的 Gemfile.lock 中
...
addressable (2.2.8)
...
Run Code Online (Sandbox Code Playgroud)
$ cat Capfile
Run Code Online (Sandbox Code Playgroud)
您需要取消注释加载“部署/资产”
load 'deploy'
# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'
Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
load 'config/deploy' # remove this line to skip loading any of the default tasks
Run Code Online (Sandbox Code Playgroud)