2012-03-19 22 views
8

Sau khi cố gắng bắt đầu quản đốc, tôi nhận được lỗi này (lưu ý rằng nó dường như hoạt động trên heroku mặc dù vậy tôi đoán đây là một vấn đề nghiêm ngặt tại địa phương) :lỗi bắt đầu của người quản lý (server.rb: 33, thiếu đối số ...)

hrn039:textthechange jon$ foreman start 
02:20:00 web.1  | started with pid 7363 
02:20:01 web.1  | /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands/server.rb:33:in `parse!': missing argument: -e (OptionParser::MissingArgument) 
02:20:01 web.1  | from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.4.1/lib/rack/server.rb:280:in `parse_options' 
02:20:01 web.1  | from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/rack-1.4.1/lib/rack/server.rb:180:in `options' 
02:20:01 web.1  | from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands/server.rb:54:in `set_environment' 
02:20:01 web.1  | from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands/server.rb:42:in `initialize' 
02:20:01 web.1  | from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands.rb:50:in `new' 
02:20:01 web.1  | from /Users/jon/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands.rb:50:in `<top (required)>' 
02:20:01 web.1  | from script/rails:6:in `require' 
02:20:01 web.1  | from script/rails:6:in `<main>' 
02:20:01 web.1  | process terminated 
02:20:01 system | sending SIGTERM to all processes 

Các Procfile chỉ có một dòng như specified by heroku

web: bundle exec rails server thin -p $PORT -e $RACK_ENV 

Và gemfile tôi có

gem 'thin' 

Google không phải là rất hữu ích với lỗi này.

Cảm ơn!

+3

Bạn có tệp '.env' chỉ định' $ RACK_ENV' trong dự án của bạn không? – nmott

+1

Bạn đã xác định RAKC_ENV trong ứng dụng heroku của mình chưa? 'heroku config' – shingara

Trả lời

0

Tôi gặp vấn đề tương tự với đường ray v3.2 trong Ubuntu 10.04. tôi quản lý để có được chạy mỏng bằng cách làm theo các bước sau:

  1. Thay đổi Procfile của bạn như sau:

    web: đường ray exec bó máy chủ mỏng -p $ PORT -e phát triển

  2. Add $stdout.sync = true ở đầu tệp config.ru của bạn, để hướng đầu ra của máy chủ đến thiết bị đầu cuối của bạn (nếu không bạn không nhận được kết quả đầu cuối)

Hãy cho tôi biết nếu nó hoạt động!

+1

Nếu bạn có Procfile của bạn với' -e development' thì nó sẽ không hoạt động đúng trên Heroku, nơi '-e production' nên được sử dụng. Bạn cần sử dụng '-e $ RACK_ENV' và chỉ định' RACK_ENV = development' trong tệp '.env' trong thư mục dự án của bạn. – nmott

0

Tôi vừa gặp phải vấn đề tương tự. Nếu bạn thay đổi Procfile thành chỉ

web: bundle exec rails server thin -p $PORT 

nó sẽ hoạt động. Lưu ý, đây sử dụng mặc định cổng Thin 5000 chứ không phải 3000 (có nghĩa là bạn sẽ cần phải đi đến http://localhost:5000 để xem ứng dụng của bạn.

Có chỉ

web: bundle exec rails server thin 

trong Procfile của bạn sẽ sử dụng cổng 3000, nhưng điều này sẽ gây ra lỗi trên Heroku

21

Đây không phải là về thực hiện trên Heroku -. thấy rằng câu hỏi ban đầu về là về thực hiện với Foreman -. đó là thực hiện ở địa phương

bạn có thể lặp lại lỗi lầm của mình bằng cách thực hiện fol rống:

ray máy chủ mỏng -e

Đó là một cách hiệu quả những gì Foreman đang chạy, cho Procfile của bạn:

web: đường ray exec bó máy chủ -p mỏng $ PORT -e $ RACK_ENV

Vì vậy, tôi sẽ đoán rằng bạn không chuyển sang đối số cho -e. I E. bạn chưa định nghĩa RACK_ENV cục bộ.

Những gì bạn có thể làm là tạo một file .env trong thư mục địa phương của bạn, một cái gì đó giống như

RACK_ENV = phát triển

PORT = 3000

Foreman sẽ tự động nhặt các địa phương .env và đặt môi trường phù hợp, trước khi tạo quy trình dựa trên việc khai báo loại quy trình của bạn.

+2

Lưu ý: Nếu bạn đang sử dụng quản đốc trên sản xuất thì bạn không muốn cam kết tệp .env vào kho lưu trữ mã của bạn. Trong trường hợp đó, tôi đề nghị thêm .env vào tệp .gitignore của bạn (giả sử bạn đang sử dụng git để kiểm soát phiên bản). –

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