2014-11-13 3 views
0

Я запускаю приложение JRuby/Rails на своем собственном сервере приложений. Я не хочу запускать свои собственные коробки Postgres прямо сейчас и хочу использовать Heroku. Итак, я объединил некоторые экземпляры Heroku Postgres и могу подключиться к ним через Sequel, но мне сложно с «родным» доступом ActiveRecord.Запуск приложения JRuby/Rails «вне помещения» с использованием Heroku Postgres

Я установил URL соединения в переменной ENV в

WAREHOUSE_PG_URL='jdbc:postgresql://<instance>:<port>/<dbname>?user=<username>&password=<password>&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory' 

Тогда в моем database.yml, у меня есть:

production: 
    adapter: postgresql 
    url: <%= ENV['RAILS_PG_URL'] %> 

Это кажется очень громоздким. Я попытался просто установив DATABASE_URL, но дул с IndexError: string not matched, и если я только что сделал

production: <%= ENV['RAILS_PG_URL'] %> 

Это взорвало с: ActiveRecord::ConnectionNotEstablished: jdbc adapter requires :driver and :url (got :driver =)

Миграция дает мне странные ошибки, хотя:

% rake db:migrate 
file:/Users/me/.rbenv/versions/jruby-1.7.15/lib/jruby.jar!/jruby/kernel19/kernel.rb:28 warning: unsupported exec option: close_others 
rake aborted! 
NoMethodError: undefined method `empty?' for nil:NilClass 
/Users/me/code/Exchange/vendor/bundle/jruby/1.9/gems/activerecord-4.1.7/lib/active_record/tasks/postgresql_database_tasks.rb:54:in `structure_dump' 
/Users/me/code/Exchange/vendor/bundle/jruby/1.9/gems/activerecord-4.1.7/lib/active_record/tasks/database_tasks.rb:150:in `structure_dump' 
/Users/me/code/Exchange/vendor/bundle/jruby/1.9/gems/activerecord-4.1.7/lib/active_record/railties/databases.rake:270:in `(root)' 
/Users/me/code/Exchange/vendor/bundle/jruby/1.9/gems/activerecord-4.1.7/lib/active_record/railties/databases.rake:43:in `(root)' 
/Users/me/code/Exchange/vendor/bundle/jruby/1.9/gems/activerecord-4.1.7/lib/active_record/railties/databases.rake:37:in `(root)' 
Tasks: TOP => db:structure:dump 
(See full trace by running task with --trace) 

Обновление: это фактический код вокруг этого метода, который взорван:

def structure_dump(filename) 
    set_psql_env 
    search_path = configuration['schema_search_path'] 
    unless search_path.blank? 
     search_path = search_path.split(",").map{|search_path_part| "--schema=#{Shellwords.escape(search_path_part.strip)}" }.join(" ") 
    end 

    command = "pg_dump -i -s -x -O -f #{Shellwords.escape(filename)} #{search_path} #{Shellwords.escape(configuration['database'])}" 
    raise 'Error dumping database' unless Kernel.system(command) 

    File.open(filename, "a") { |f| f << "SET search_path TO #{ActiveRecord::Base.connection.schema_search_path};\n\n" } 
    end 

линия 54 является command = "pg_dump..... один

Update2: Я также хочу просто бросаться «Я раздражен, я должен использовать„не беспокоить проверки, если сертификаты хороши“в этой установке» в там, также.

Update3: Я просто внимательно посмотрел на это и понял, как странно это было:

% rake db:migrate 
file:/Users/me/.rbenv/versions/jruby-1.7.15/lib/jruby.jar!/jruby/kernel19/kernel.rb:28 warning: unsupported exec option: close_others 
E, [2014-11-13T15:45:49.482000 #86686] ERROR -- : ActiveRecord::JDBCError: org.postgresql.util.PSQLException: ERROR: relation "users" does not exist 
    Position: 293:   SELECT a.attname, format_type(a.atttypid, a.atttypmod), 
       pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod 
      FROM pg_attribute a LEFT JOIN pg_attrdef d 
      ON a.attrelid = d.adrelid AND a.attnum = d.adnum 
     WHERE a.attrelid = '"users"'::regclass 
      AND a.attnum > 0 AND NOT a.attisdropped 
     ORDER BY a.attnum 

I, [2014-11-13T15:45:51.671000 #86686] INFO -- : Migrating to CreateMarkets (20140312080145) 

CreateMarkets моей первой миграция - Я не могу понять, где этот код пришел от rased исключения, произошло прямо перед ним. Кроме того, это исключение не остановило остальные миграции пропадали ....

ответ

0

Похоже, что я был в состоянии исправить это, добавив все свои базы данных подробной информации о подключении к database.yml:

production: 
    adapter: postgresql 
    url: <%= ENV['RAILS_PG_URL'] %> 
    database: <%= ENV['RAILS_PG_DATABASE'] %> 
    port: <%= ENV['RAILS_PG_PORT'] %> 
    host: <%= ENV['RAILS_PG_HOST'] %> 
    username: <%= ENV['RAILS_PG_USER'] %> 
    password: <%= ENV['RAILS_PG_PASSWORD'] %> 
    ssl: true 

Таким образом, адаптер ActiveRecord JDBC использует URL для соединения (со всеми ssl-cert-unchecking и все такое), тогда как «обычный» материал, который происходит в ходе обслуживания БД (pg_dump), должен будет создать собственный набор ENV переменные для управления выполнением этой команды. Ухоженная.

Я не «влюблен» в это, но все нормально.