2013-06-18 31 views
10

Tôi đang cố gắng sử dụng di chuyển lần đầu tiên trong dự án Propel đang phát triển của mình (vì vậy tôi không phải chèn lại 15MB dữ liệu), nhưng có một số khó khăn. Tôi đã thực hiện các thay đổi trong giản đồ của mình và chạy propel-gen diff. Lần đầu tiên tôi nhận được lỗi rằng nó không thể tìm thấy tệp buildtime-conf.xml của tôi. Tôi chưa làm một cái nào (vì nó không cần thiết), nhưng đọc rằng cấu trúc phải giống như runtime-conf.xml. Tôi đã sao chép runtime-conf.xml đến buildtime-conf.xml. Và bây giờ nhận được lỗi sau:Propel PostgreSQL Migration không thể tìm thấy adapter

[propel-sql-diff] Reading databases structure... 
[phingcall] Unable to find adapter for datasource [project]. 
Execution of target "sql-diff" failed for the following reason: /var/www/project/vendor/propel/propel1/generator/build-propel.xml:317:26: Execution of the target buildfile failed. Aborting. 
    [phing] /var/www/project/vendor/propel/propel1/generator/build-propel.xml:317:26: Execution of the target buildfile failed. Aborting. 

thời gian chạy và buildtime My files trông giống như sau:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <propel> 
     <datasources default="project"> 
      <datasource id="project"> 
       <adapter>pgsql</adapter> 
       <connection> 
        <dsn>pgsql:host=###.###.###.###;dbname=database</dsn> 
        <user>USER</user> 
        <password>PASS</password> 
       </connection> 
      </datasource> 
     </datasources> 
    </propel> 
</config> 

schema của tôi là dọc theo dòng này:

<?xml version="1.0" encoding="UTF-8"?> 
<database name="project" defaultIdMethod="native"> 
    <table schema="accounts" name="accounts" phpName="Account" package="accounts"> 
     <column /> 
    </table> 
</database> 

tôi đã cố gắng thay đổi buildtime-conf thành <datasource id="testing"> và lỗi đã thay đổi thành Unable to find adapter for datasource [testing]. Vì vậy, lỗi nằm trong tệp buildtime-conf thực tế (không phải lược đồ), theo như tôi có thể nói. Tôi nghĩ có lẽ Propel không thể tìm thấy adapter của PostgreSQL (mặc dù nó hoạt động tốt trong thời gian chạy-conf của tôi), vì vậy tôi đã cố gắng thay đổi bộ điều hợp của tôi thành mysql. Nó đến với cùng một không thể tìm thấy lỗi bộ chuyển đổi.

Tôi hoàn toàn mất, suy nghĩ?

Cập nhật: vì vậy tôi đã có thể đi vào /Propel/runtime/lib/Propel.php và xác định vị trí dòng nơi ngoại trừ Unable to find adapter bị ném. Tôi đã xác định biến bằng tay bằng cách thêm dòng self::$configuration['datasources'][$name]['adapter'] = 'pgsql' và nó hoạt động. Điều này rõ ràng là không xác minh hữu ích cho bây giờ, vì tôi sẽ không thể cập nhật Propel mà không làm lại thay đổi này. Tôi đã bán self::$configuration trong Propel.php và nó là NULL, bất kỳ ý tưởng nào tại sao?

+0

Bạn đang chạy phiên bản nào? Nếu nó là 1,6, vẫn còn trong hỗ trợ afaik - Tôi sẽ gửi một lỗi. Có vẻ như những thứ di chuyển không khởi tạo được kết nối, mặc dù tôi không biết thực sự là ruột. Ngoài ra, nếu bạn muốn nén một tệp schema.xml và build.properties đầy đủ, tôi sẽ thử di chuyển trên máy tính của tôi nếu bạn muốn (chưa thử chúng, nhưng giữ ý nghĩa để tìm hiểu nó!). – halfer

Trả lời

3

Có vẻ như chuyển đổi phụ thuộc Composer thành dev-master sửa lỗi này - có 20 commits difference giữa bản phát hành hiện tại (1.7.1) và chính, tại thời điểm viết. Bản vá di chuyển cụ thể là is here.

Hy vọng rằng bản phát hành 1.7.2 sẽ được đưa ra trong khóa học, mặc dù cần lưu ý rằng nỗ lực phát triển của nhóm có thể sẽ tập trung vào Propel2 hiện tại (vẫn còn trong alpha).

+0

Tuyệt vời, tìm tốt và cảm ơn bạn đã quay lại để cho mọi người biết @halfer. Nhiều năm sau và họ tìm thấy lỗi đơn giản, đoán không nhiều người sử dụng pgsql ... – Sam

+1

Không có probs @Sam, tôi gặp phải vấn đề tương tự bản thân mình. Tôi đã gặp phải một vài băm khó chịu với việc di chuyển, nhưng thật khó để biết có bao nhiêu nỗ lực đưa vào cung cấp các bản sửa lỗi ngược dòng. Dường như có một số PR đang chờ đợi từ ít nhất là tháng 4 năm 2014, nhưng nhà phát triển chính trước đó [đã có ý định hợp nhất chúng chậm] (https://github.com/propelorm/Propel/issues/859#issuecomment-39421396) , vì lý do ổn định. – halfer

2

Trong phiên bản ổn định mới nhất của Propel (1.7.1) nó là inpossible để thêm đoạn mã sau:

self::$configuration['datasources'][$name]['adapter'] = 'mysql';

Kết quả trong các lỗi sau:

Indirect modification of overloaded element of PropelConfiguration has no effect

Đó là tại sao, nếu bạn chỉ có một bộ điều hợp, bạn có thể sử dụng:

/* 
if (!isset(self::$configuration['datasources'][$name]['adapter'])) { 
    throw new PropelException("Unable to find adapter for datasource [" . $name . "]."); 
} 
*/ 
$db = DBAdapter::factory('mysql'); 
// register the adapter for this name 
self::$adapterMap[$name] = $db; 

Lỗi này chỉ xảy ra khi sử dụng ./propel-gen diff. Vẫn còn rất lạ. Hy vọng họ sẽ sửa nó sớm.

Các vấn đề liên quan