রেলস ২.১.০


281

আমি একটি সূচক ফাংশন সহ একটি সাধারণ পৃষ্ঠাগুলি নিয়ন্ত্রকের সাথে একটি বেসিক রেলস অ্যাপ তৈরি করেছি এবং যখন আমি পৃষ্ঠাটি লোড করি তখন:

ActionView::Template::Error (application.css isn't precompiled):
    2: <html>
    3: <head>
    4:   <title>Demo</title>
    5:   <%= stylesheet_link_tag    "application" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8: </head>
  app/views/layouts/application.html.erb:5:in `_app_views_layouts_application_html_erb__43625033_88530400'

Gemfile

source 'http://rubygems.org'

gem 'rails', '3.1.0'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

gem 'execjs'
gem 'therubyracer'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails', "  ~> 3.1.0"
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
end

gem 'jquery-rails'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

group :test do
  # Pretty printed test output
  gem 'turn', :require => false
end

7
বান্ডেল এক্সেক রেক সম্পদ: প্রাকম্পাইল এটি ঠিক করে দিচ্ছে, তবে কেন এটি কেবল কাজ করে না?
ক্রিস Muench

10
প্রোডাকশনে আমার একই সমস্যা রয়েছে, রান বান্ডিল এক্সিকিউট রেক সম্পদ পরেও: প্রাকম্পাইল
লুকাস রেনান

উত্তর:


313

ডিফল্টরূপে রেলগুলি ধরে নেয় যে আপনি আপনার ফাইলগুলি উত্পাদন পরিবেশে পূর্বনির্ধারিত করেছেন, যদি আপনি উত্পাদনতে লাইভ সংকলন (রানটাইম চলাকালীন আপনার সম্পদগুলি সংকলন) ব্যবহার করতে চান তবে আপনাকে অবশ্যই config.assets.compile সেট করতে হবে ।

# config/environments/production.rb
...
config.assets.compile = true
...

আপনি প্রাক্পম্পাইল সংস্থানগুলি ব্যবহার করার সময় স্প্রোককেটে ফ্যালব্যাক করতে এই বিকল্পটি ব্যবহার করতে পারেন তবে কোনও অনুপস্থিত প্রাকম্পম্পাইল ফাইল রয়েছে।

তাহলে config.assets.compileবিকল্প মিথ্যাতে সেট করা থাকে এবং হারিয়ে যাওয়া precompiled আপনি যে ফাইলগুলি একটি "AssetNoPrecompiledError" অনুপস্থিত ফাইলের নাম ইঙ্গিত পাবেন আছে।


3
আপনি এই নিবন্ধটি যা বলেছেন সেগুলি চেষ্টা করতে পারেন: devcenter.heroku.com/articles/rails31_heroku_cedar (আমি এখনও এটি চেষ্টা করি নি)
ক্রিস মুইঞ্চ

7
কেবল পরিষ্কার করার জন্য, config.assets.compile বিকল্পটি কনফিগারেশন / এনভায়রনমেন্টস / প্রোডাকশন.আরবিতে রয়েছে (আপনি যদি প্রোডাকশনে কাজ করছেন)। এবং আপনি যদি উত্পাদনে লাইভ / অলস সংকলন করতে সক্ষম হতে চান তবে আপনার অ্যাপ্লিকেশন.আরবিতে অলস সংকলন সক্ষম করতে হবে।
22-29 এ এভোয়েজ করা

34
রানটাইম সংকলন সক্রিয় করা সমাধান নয়, কারণ আমাদের নেওয়া পারফরম্যান্স হিট। সমাধানটি হ'ল মূল সমস্যাটি সংশোধন করা যা সম্পত্তির পূর্ববর্তীকরণ ঘটতে বাধা দিচ্ছে।
ডেভিড Tuite

5
আমি RAILS_ENV = প্রোডাকশন বান্ডেল এক্সিকিউট রেক সম্পদ ব্যবহার করে সম্পত্তি পূর্বে কম্পম্পাইল করেছি: প্রাকম্পাইল। আমি কেন এই ত্রুটি পাচ্ছি এবং এই পতাকাটি সেট করার দরকার আছে কেন?
টনি

2
@ টনি, কারণ আপনি সম্ভবত অ্যাপ্লিকেশন সিএসএস / জেএস / চিত্র ফাইল ব্যতীত অন্য কোনও কিছু চেয়েছিলেন, এবং আপনি এটি নিবন্ধভুক্ত করেন নি application.rb। / সম্পাদনার যোগ করুন application.rb: config.assets.precompile += %w( first.css second.js )। এখন এই ফাইলগুলি পাশাপাশি সংকলন করা হবে। আপনি যদি কেবল require<link><script>
স্প্রোকেটগুলিতে

202

আপনি যদি config.assets.compile কে প্রোডাকশন-আরবিতে মিথ্যা হিসাবে সেট করে থাকেন এবং আপনার সম্পদগুলি পূর্বনির্মাণ করেন তবে আপনি উত্পাদনতে আরও ভাল পারফরম্যান্স পাবেন। আপনি এই রেক টাস্কটি পূর্বরূপ করতে পারেন:

bundle exec rake assets:precompile

যদি আপনি ক্যাপিস্ট্রানো ব্যবহার করেন তবে সংস্করণ ২.৮.০ এ মোতায়েনের সময় এটি হ্যান্ডেল করার একটি রেসিপি রয়েছে। আরও তথ্যের জন্য, সম্পদ পাইপলাইন গাইডের "উত্পাদনের" বিভাগটি দেখুন : http://guides.rubyonrails.org/asset_pipline.html


14
এটি কীভাবে করা যায় তা খুঁজে বের করা কতটা কঠিন ছিল তা আমি বিশ্বাস করতে পারি না।
derekerdmann

3
এটি সুস্পষ্টভাবে আরও ভাল বিকল্পটির মতো বলে মনে হচ্ছে: লাইভ সংকলনকে সত্য হিসাবে সেট করা "আরও মেমরি ব্যবহার করে, ডিফল্টের চেয়ে খারাপভাবে সম্পাদন করে এবং এটির প্রস্তাব দেওয়া হয় না।" guids.rubyonrails.org/asset_piplines.html#live-compilation
andrew.rockwell

rake -Tবা bundle exec rake -Tআপনার বন্ধু
রায়ান

2
@Underworld Bundler একটি রুবি অ্যাপ্লিকেশানে মণি নির্ভরতা পরিচালনার জন্য একটি টুল এবং আপনি bundler ব্যবহার করে থাকেন, চলমান এটা পাগল 3. মধ্যে নির্মিত হয় bundle exec rake ...নিশ্চিত করবে যে আপনি সঠিক মই দিয়া আহরণ করা এবং আপনার অ্যাপের জন্য যুক্ত নির্ভরতা লোড করা হচ্ছে। আপনি যদি বান্ডিলার ব্যবহার না করেন তবে আপনি কেবল চালাবেন rake ...
রিচার্ডসন

3
আপনি যদি উপরের কমান্ডটি চালাচ্ছেন তবে নিশ্চিত হয়ে নিন যে আপনি ইতিমধ্যে আপনার পরিবেশটি উত্পাদন মোডে সেট করেছেন, বা RAILS_ENV = উত্পাদনের সাথে কমান্ডটির উপসর্গ রেখেছেন
JESii

31

ঠিক আছে - আমারও একই সমস্যা ছিল। আমি "config.assets.compile = true" ব্যবহার করতে চাইনি - আমাকে আমার সমস্ত .css ফাইলগুলি কনফিগারেশন / পরিবেশ / প্রোডাকশন.rb এর তালিকায় যুক্ত করতে হয়েছিল:

config.assets.precompile += %w( carts.css )

তারপরে আমাকে tmp / restart.txt তৈরি করতে হবে (এবং পরে মুছতে হবে)

আমি ধারাবাহিকভাবে স্টাইলশীট_লিংক_ট্যাগ সহায়ক ব্যবহার করেছি, সুতরাং আমি যুক্ত করতে অতিরিক্ত অতিরিক্ত সিএসএস ফাইলগুলি পেয়েছি:

find . \( -type f -o -type l \) -exec grep stylesheet_link_tag {} /dev/null \;

আপনি যদি বিভিন্ন রেজোলিউশনের জন্য মিডিয়া ক্যোয়ারী এবং বিভিন্ন সিএসএস ফাইল ব্যবহার করেন তবে এটি যাওয়ার সেরা উপায়।
FA11enAngel

1
আমাকে আমার সমস্ত সিএসএস ফাইল অ্যারেতে অন্তর্ভুক্ত করতে হবে? আমার কাছে 40 সিএসএস ফাইল থাকলে কী হবে?
yozzz

30

ক্যাপিস্ট্রানো ব্যবহারকারীর জন্য একটি দ্রুত ফিক্স হ'ল এই লাইনটি ক্যাপফাইলে রেখে দেওয়া

# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'

11

সমস্ত যারা এই পড়া হয় কিন্তু সঙ্গে সমস্যা আছে না application.cssএবং এর পরিবর্তে তাদের কাস্টম CSS শ্রেণীর যেমন সঙ্গে admin.css, base.cssইত্যাদি

সমাধান হিসাবে উল্লিখিত হিসাবে ব্যবহার করা হয়

bundle exec rake assets:precompile

এবং স্টাইলশিটগুলিতে কেবল রেফারেন্স application.css

<%= stylesheet_link_tag    "application", :media => "all" %>

যেহেতু সম্পদ পাইপলাইন অ্যাপ্লিকেশন CSS এ আপনার স্টাইলশিটগুলির সমস্ত পূর্বনির্ধারিত করবে। এটি উন্নয়নের ক্ষেত্রেও ঘটে তাই সম্পদ পাইপলাইন ব্যবহার করার সময় অন্য কোনও রেফারেন্স ব্যবহার করা ভুল।


8

আমার বিকাশের পরিবেশে ঠিক একই ত্রুটি ছিল আমার। শেষ পর্যন্ত এটি সংশোধন করার জন্য আমার যা করতে হবে তা হ'ল:

config.assets.manifest = Rails.root.join("public/assets")

আমার কনফিগারেশন / পরিবেশ / উন্নয়ন.rb ফাইল এবং এটি এটি স্থির করে। সম্পত্তির সাথে সম্পর্কিত বিকাশের ক্ষেত্রে আমার চূড়ান্ত কনফিগারেশনটি দেখে মনে হচ্ছে:

config.assets.compress = false  
config.assets.precompile += %w[bootstrap-alerts.js] #Lots of other space separated files
config.assets.compile = false
config.assets.digest = true
config.assets.manifest = Rails.root.join("public/assets")
config.assets.debug = true

এটি আমার জন্য কাজ করা একমাত্র সমাধান ছিল। আমার রেইলগুলির সংস্করণে (3.1.3) সমস্যা ছিল? যাইহোক, আমি বলতে পারি যে আমার সম্পদগুলি সাফল্যের সাথে সর্বজনীন / সম্পত্তিতে প্রাক-সংকলিত হয়েছে এবং তাদের ফাইলের নামগুলি ম্যানিফেস্ট.আইএমএল-তে তালিকাভুক্ত একই এসএএচএ রয়েছে। কিছু কারণে, আমার সেটআপ সর্বদা সূক্ষ্মভাবে কাজ করে থাকলেও, রিয়েলগুলি এখন সঠিক জায়গায় সম্পত্তি খুঁজছিল না। এই পরিবর্তন যে স্থির।
এন্টিনোম

এই সমাধানের জন্য ধন্যবাদ। আমি ডেভলপমেন্ট মোডে কিছু জিনিস পরীক্ষা করার চেষ্টা করছিলাম এবং আমি অবাক হয়ে গিয়েছিলাম যে এটি "অ্যাপ্লিকেশন সিএস প্রাক্পম্পাইল নয়" যদিও আমি ইতিমধ্যে ডিরেক্টরিতে জনসম্পর্কিত সম্পত্তি এবং জনসাধারণ / সম্পদ / অ্যাপ্লিকেশন সিএস উপস্থিত ছিলাম। অবাক হয়ে তারা প্রযোজনার মতো আপনার জন্য স্বয়ংক্রিয়ভাবে বিকাশে কনফিগারেশন.সেটস.মनिসেট সেট করে না ..
টাইলার রিক

5

আমারও এই সমস্যাটি ছিল, যেখানে প্রম্পম্পাইলিং ছাড়াই উত্পাদন চালানোর চেষ্টা করা এটি এখনও পূর্ব-পূর্ববর্তী ত্রুটি ছুঁড়ে ফেলবে। আমাকে কোন লাইনে অ্যাপ্লিকেশন.আরবি মন্তব্য করা হয়েছিল তা পরিবর্তন করতে হয়েছিল:

  # If you precompile assets before deploying to production, use this line
  # Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  Bundler.require(:default, :assets, Rails.env)

2
এই পরে যে কেউ আসবে তার জন্য কেবল স্পষ্ট করে বলতে চাই, উপরে আপনার যে কোডটি পরিবর্তন করতে হবে তা অবস্থিতconfig/application.rb
জিএমএ

4

দ্রুত সমাধান এখানে:

আপনি যদি ক্যাপিস্ট্রানো ব্যবহার করেন তবে এটি আপনার ডিপ্লয়ে.আরবিতে যুক্ত করুন:

after 'deploy:update_code' do
  run "cd #{release_path}; RAILS_ENV=production rake assets:precompile"
end

ক্যাপ মোতায়েন


2

আমি আজ এই ত্রুটি বার্তায় দৌড়েছি এবং আমার বিশেষ ক্ষেত্রে আমার রেজোলিউশনটি পোস্ট করতে চেয়েছিলাম। দেখা যাচ্ছে যে আমার সমস্যাটি হ'ল আমার একটি সিএসএস ফাইলের একটি ক্লোজিং বন্ধনী অনুপস্থিত ছিল এবং এর ফলে ফাইলটি সংকলিত হয়নি। এটি যদি আপনার উত্পাদন পরিবেশের জন্য সমস্ত কিছু সেট করে (সম্পদ পূর্ববর্তী সহ) সেট করে এমন একটি স্বয়ংক্রিয় প্রক্রিয়া থাকে তবে এটি লক্ষ্য করা আরও কঠিন।


1

সব পরে ব্যর্থ ...

আমার সমাধানটি ছিল লেআউট ফাইলটি থেকে পরিবর্তন করা

= stylesheet_link_tag "reset-min", 'application'

প্রতি

= stylesheet_link_tag 'application'

এবং এটা কাজ করে! (আপনি পুনরায় সেট ফাইলটি ম্যানিফেস্টের ভিতরে রাখতে পারেন))


1

হেরোকুতে এটি ঠিক করার আরও একটি উপায়: আপনার রেকফিল প্রতিশ্রুতিবদ্ধ এবং ঠেলাঠেলি করা হয়েছে তা নিশ্চিত করুন।


0

হিরকু সার্ভারে (কেবলমাত্র ফাইল সিস্টেম), আপনি যদি সিএসএসের রানটাইম সংকলন চান (এটি প্রস্তাবিত নয় তবে আপনি এটি করতে পারেন) তবে নীচের মতো সেটিংস করেছেন তা নিশ্চিত করুন -

# inside config/application.rb
config.assets.enabled = true
config.assets.prefix = Rails.root.join('tmp/assets').to_s

# If you are using sass then keep gem outside of asset group
 gem 'sass-rails',   '3.1.4'

# inside config/environments/production.rb
config.assets.compile = true

0

আপনি যদি মনে করেন যে আপনি ভাল কিছু অনুসরণ করেছেন তবে এখনও দুর্ভাগ্য, কেবল আপনি / ক্যাপটিস্ট্রানো স্পর্শ tmp / restart.txt বা শেষে সমতুল্যভাবে চালাচ্ছেন তা নিশ্চিত করুন। আমি দুর্ভাগ্যজনক তালিকায় ছিলাম তবে এখন :)


0

আপনি সম্ভবত syntax errorসিএসএস ব্যবহার করছেন a

এই আদেশটি চালান

$ bundle exec rake assets:precompile RAILS_ENV=development --trace

এটি ব্যতিক্রম দেয়, এটি স্থির করে দেয় এবং আপনি সব শেষ করেছেন।

ধন্যবাদ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.