Tôi đang cố gắng sử dụng Node.js làm thời gian chạy JavaScript cho ứng dụng Rails của mình. Tôi đang sử dụng mô-đun Phusion Passenger với Nginx làm máy chủ web của tôi trên Ubuntu 12.0.4. Mỗi lần tôi truy cập ứng dụng Rails của tôi, tôi nhận được một trang lỗi xuất hiện được tạo ra từ Hành khách nói rằng ExecJS không thể tìm thấy thời gian chạy JavaScript. Tôi đã nhìn thấy rất nhiều bài viết trên đây hoặc là đề nghị rằng bạn cài đặt Node - mà tôi đã thực hiện thông qua sudo apt-get install node
- hoặc đề nghị sử dụng therubyracer + execjs trong Gemfile của bạn. Đó là giải pháp thứ hai trong thực tế công việc, nhưng tôi thực sự muốn sử dụng Node, đặc biệt là kể từ Heroku has stated rằng họ không khuyến khích sử dụng therubyracer làm cho thực tế là nó sử dụng một "số lượng rất lớn của bộ nhớ".Đường ray/Hành khách/Node.js: ExecJS "Không thể tìm thấy thời gian chạy JavaScript"
Tôi chạy vào một tutorial cho thấy rằng người dùng mà máy chủ web của tôi chạy có thể không có nút trong đường dẫn của nó. Tôi đã kiểm tra điều này bằng cách chạy sudo -u www-data which node
và trả về /usr/bin/node
. Người dùng www-data là người dùng mà nginx chạy và người dùng sở hữu tất cả các tệp trong ứng dụng Rails của tôi. Tôi cũng đã xem /etc/environment
và tôi có thể thấy rằng /usr/bin
nằm trong đường dẫn toàn hệ thống. Chạy sudo -u www-data node -v
cũng trả về phiên bản Nút như mong đợi, vì vậy nó có thể thực thi được.
Khi tôi chạy RAILS_ENV=production bundle exec rake assets:precompile
Tôi không gặp bất kỳ lỗi nào. Khi tôi tải ExecJS vào một phiên tương tác với IRB tôi có thể làm cho nó trả về một thời gian chạy hợp lệ. Tôi cũng đã cố gắng thêm một cách rõ ràng EXECJS_RUNTIME=Node
làm biến môi trường, nhưng sau đó nó chỉ nói "Thời gian chạy Node.js (V8) không có sẵn" thay thế. Tôi đã thử nhiều thứ và tôi không thể làm việc này được!
Đây là lỗi tôi nhận được khi tôi truy cập ứng dụng Rails của mình. Khi tôi nhìn vào tập tin đăng nhập Nginx tôi thấy khá nhiều điều tương tự.
Web application could not be started
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
/usr/lib/ruby/gems/2.1.0/gems/execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect'
/usr/lib/ruby/gems/2.1.0/gems/execjs-2.0.2/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/lib/ruby/gems/2.1.0/gems/execjs-2.0.2/lib/execjs.rb:4:in `<top (required)>'
/usr/lib/ruby/gems/2.1.0/gems/uglifier-2.5.0/lib/uglifier.rb:3:in `require'
/usr/lib/ruby/gems/2.1.0/gems/uglifier-2.5.0/lib/uglifier.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:76:in `require'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:72:in `each'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:72:in `block in require'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:61:in `each'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler/runtime.rb:61:in `require'
/usr/lib/ruby/gems/2.1.0/gems/bundler-1.6.1/lib/bundler.rb:132:in `require'
/srv/www/app/config/application.rb:7:in `<top (required)>'
/srv/www/app/config/environment.rb:2:in `require'
/srv/www/app/config/environment.rb:2:in `<top (required)>'
config.ru:3:in `require'
config.ru:3:in `block in <main>'
/usr/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
/usr/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `eval'
/usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:158:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'
Bạn có thể giải quyết vấn đề này không? Tôi đang trải qua cùng một ví dụ trên Amazon EC2 của tôi - mọi thứ hoạt động tốt khi tôi chạy ExecJS :: Runtimes.autodetect từ giao diện điều khiển (trên máy chủ), nhưng bị ngắt từ bên trong Hành khách – Yevgeniy
Không. Tôi không thể hiểu được. Tôi quyết định chỉ sử dụng đá quý therubyracer & execjs và gọi nó là tốt. – Adam
Có thể xác nhận rằng đây là lỗi liên tục, dừng hiển thị. Tôi đã có thể nhận được Rails 4.1, Ruby 2.0 làm việc với AMI Amazon Linux mặc định, nhưng ngay sau khi tôi khởi động lại máy chủ, lỗi này không thể giải thích được, mặc dù không có gì thay đổi. –