2013-04-05 53 views
3

当使用Capistrano的我总是碰到下面的错误部署我的开发环境,以我的外部开发服务器:Capifony + Symfony2中无法写入缓存文件

RuntimeException: Failed to write cache file "/var/www/xyz.co.uk/app/cache/dev/classes.php". 

然后,我必须登录到我的开发服务器,并删除我的应用程序/ cache/dev /目录。

这里是我的development.rb文件:

server 'x.xx.xx.xxx', :app, :web, :db, :primary => true 
ssh_options[:port] = 1234 
ssh_options[:forward_agent] = true 
set :deploy_to, "/var/www/xyz.co.uk" 
set :symfony_env_prod, "dev" 
set :branch, "develop" 

# Need to clear *_dev controllers 
set :clear_controllers,  false 

而且我deploy.rb文件:

set :stage_dir, 'app/config/deploy' # needed for Symfony2 only 
set :stages, %w(production staging development) 
require 'capistrano/ext/multistage' 

set :application,   "xyz.co.uk" 
set :user,     "root" # The server's user for deploys 

set :normalize_asset_timestamps, false 

set :repository,   "[email protected]:xyz/xyz.co.uk.git" 
set :scm,     :git 
set :keep_releases,   3 
set :use_sudo,    false 
set :web_path,    "web" 
set :shared_files,   ["app/config/parameters.yml"] 
set :shared_children,  [app_path + "/logs", web_path + "/uploads"] 
set :use_composer,   true 
set :update_vendors,  true 
set :dump_assetic_assets, true 
set :deploy_via,   :remote_cache 

#logger.level = Logger::MAX_LEVEL 
+0

这很可能是一个权限问题。 – cheesemacfly 2013-04-05 16:38:30

+0

因为我部署为根?如何在部署时设置缓存和日志权限? – user1961082 2013-04-05 17:03:16

+0

您不应该以root身份进行部署,因为这是一个主要的安全问题。更好的办法是创建一个单独的用户来进行部署。或者,如果你是唯一的部署者,你可以像你一样部署。 – 2013-04-07 10:43:31

回答

4

我在我的deploy.rb文件中设置了缓存目录的权限:

after "deploy:update_code" do 
    capifony_pretty_print "--> Ensuring cache directory permissions" 
    run "setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX #{latest_release}/#{cache_path}" 
    run "setfacl -dR -m u:www-data:rwX -m u:`whoami`:rwX #{latest_release}/#{cache_path}" 
    capifony_puts_ok 
end 
+0

谢谢,我会试试这个,让你知道它是否有效。 – user1961082 2013-04-06 16:09:53

+0

这工作!谢谢。 – user1961082 2013-04-07 10:29:19

0

要部署为root,所以你必须使用sudo

set :use_sudo, true 
+0

你应该使用sudo吗?最好是使用不同的用户?用户必须是万维网数据吗? – user1961082 2013-04-06 16:09:37

+0

既然你提到你使用用户'root'来部署,那么你必须指定我提到的那一行。一般来说,以root身份部署并不是一个好主意,但是你的问题不是关于它的。:)使用'www-data'是更好的主意。 – 2013-04-06 20:50:53

+0

我已经去了@Elnur Abdurrakhimov方法,因为这允许我使用root用户,但仍然在缓存目录上设置正确的权限。 – user1961082 2013-04-07 10:30:54