web-dev-qa-db-ja.com

Capistrano 3、Rails 4、データベース構成でアダプターが指定されていません

私が始めるとき

キャッププロダクションデプロイ

このように失敗します:

DEBUG [4ee8fa7a] Command: cd /home/deploy/myapp/releases/releases/20131025212110 && (RVM_BIN_PATH=~/.rvm/bin Rails_ENV= ~/.rvm/bin/myapp_rake assets:precompile )
DEBUG [4ee8fa7a]        rake aborted!
DEBUG [4ee8fa7a]        database configuration does not specify adapter

「Rails_ENV =」が実際には空であることがわかりますが、なぜそれが発生するのでしょうか。これが、データベース構成がないという後者のエラーの理由だと思います。

deploy.rbファイルは以下のとおりです。

set :application, 'myapp'
set :repo_url, '[email protected]:developer/myapp.git'
set :branch, :master
set :deploy_to, '/home/deploy/myapp/releases'
set :scm, :git
set :devpath, "/home/deploy/myapp_development"
set :user, "deploy"
set :use_Sudo, false
set :default_env, { rvm_bin_path: '~/.rvm/bin' }

set :keep_releases, 5

namespace :deploy do
  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      # Your restart mechanism here, for example:
      within release_path do
        execute " bundle exec thin restart -O -C config/thin/production.yml"
      end
    end
  end

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      within release_path do

      end
    end
  end

  after :finishing, 'deploy:cleanup'
end

Database.yml:

production:
  adapter: mysql2
  encoding: utf8
  database: myapp_production
  pool: 5
  username: user
  password: pass
  Host: localhost

development:
  adapter: mysql2
  encoding: utf8
  database: myapp_development
  pool: 5
  username: user
  password: pass
  Host: localhost

追加すると問題は解決します

set :Rails_env, "production"

私のdeploy.rbに、しかしこれは私にはハードコーディングのように見えます、そして私はより良い解決策があると確信しています。

17
Kazmin

編集: このプルリクエスト ごとに、1.1.0のバージョンcapistrano-Railsで修正されました。

このGithubの問題 ごとに、別の修正はCapfileを編集することです。これらの2行をコメントアウトします

#require'capistrano/Rails/assets '
#require'capistrano/Rails /migrations'

この行を

 require'capistrano/Rails '

これにより、Rails_ENV変数が正しく設定されます。

18
Waynn Lue

Rails 4でキャップ3とcapistrano_Railsを使用すると、同じエラーが発生しました。デプロイされている環境ファイルで、

set :stage, :production
set :Rails_env, 'production' # even though doc says only need to do this if it's different

ここにドキュメント: https://github.com/capistrano/Rails

13
Tom Harrison

間違いなく正しいと思われるマークの答えに基づいて、

これをconfig/deploy.rbの「namespace:deploy」ブロックに追加することで、アップストリームで修正されるまでこれを回避できます。

  desc 'Provision env before assets:precompile'
  task :fix_bug_env do
    set :Rails_env, (fetch(:Rails_env) || fetch(:stage))
  end

  before "deploy:assets:precompile", "deploy:fix_bug_env"

これにより、assets:precompileが呼び出される前に、envのロードとRails_ENVのプロビジョニングが強制されます。

8
Root 42

Capistrano-Railsのバグのようです。

Rails_envまたはstageのいずれかから環境を設定するタスク(Rails.rake)があります。

namespace :deploy do
  before :starting, :set_Rails_env do
    set :Rails_env, (fetch(:Rails_env) || fetch(:stage))
  end
end

ただし、このタスクは、assets:precompileの前には呼び出されません。したがって、この:

namespace :assets do
  task :precompile do
    on roles :web do
      within release_path do
        with Rails_env: fetch(:Rails_env) do
          execute :rake, "assets:precompile"
        end
      end
    end
  end
end

明示的に設定されていない場合、Rails_envはnilであるため、失敗します。

もう少し深く掘り下げる時間があれば、バグレポートを提出します。

8
Marc

乗客を使用している場合は、追加する必要があります

Rails_env production;

passenger_Rubyおよびpassenger_rootの値を指定したWebサーバー(例:nginx).conf内。

2
Rahul

ファイルを追加するとどうなりますか:

deploy/production.rb

この行で:

set :stage, :production
1
Ben